0

Doctrine 2.1 で継承を使用しています:

Fiche はマスター エンティティであり、Artist は Fiche から派生したものです。

so : フィッシュ -> アーティスト

次に、 Abonnement という別のリポジトリにこのメソッドがあります。

public function getCountAbonnes(\MyApp\FicheBundle\Entity\Fiche $fiche){

    $qb = $this->_em->createQueryBuilder();

    $qb->add('select', $qb->expr()->count('abonnement'));
    $qb->from('\Teelt\FicheBundle\Entity\Abonnement', 'abonnement');

    // !!!! this line is the problem !!!!
    $qb->where('fiche', $fiche);

    return $qb->getQuery()->getSingleScalarResult();
}

Abonnement ORM の定義は次のとおりです。

MyApp\FicheBundle\Entity\Abonnement:
    type: entity
    repositoryClass: MyApp\FicheBundle\Repository\AbonnementRepository
    table: abonnement

    # many fiche for many users
    manyToOne:
      user:
        targetEntity: MyApp\UserBundle\Entity\User
        inversedBy: abonnements
      fiche:
        targetEntity: MyApp\FicheBundle\Entity\Fiche
        inversedBy: abonnements

# etc ...

ここでの問題は、常に Fiche ではなく Artist エンティティを渡すことで、次のエラーが発生します。

タイプ 'Teelt\FicheBundle\Entity\Artist' の式は、このコンテキストでは許可されていません。

したがって、アーティストから Fiche を取得する必要があると思います...同じオブジェクトなので、悪いように聞こえます!

4

2 に答える 2

2

あなたの答えのおかげで、解決策に近づきました。

しかし、最後には次のようです:

$qb->where($qb->expr()->eq('abonnement.fiche', $fiche->getId() ));

が解決策でした。

正常ですか?ID のマッピングは自動的に行われると思っていましたが、getId() を使用しない場合、Fiche の toString() バージョンが返され、次のように生成されます。

SELECT COUNT(abonnement) FROM MyAppFicheBundle:Abonnement abonnement WHERE abonnement.fiche = Miles Davis

[構文エラー] 0 行目、100 列目: エラー: 文字列の終わりが予想されますが、'Davis' を取得しました

于 2012-11-02T14:02:06.160 に答える
0

$qb->where文字列 (DQL)、またはクエリ ビルダー式を受け入れます。

あなたの場合、行を次のように置き換えます。

$qb->where($qb->expr()->eq('abonnement.fiche', $fiche));

また、冒頭を次のように書き直します。

$qb = $this->_em->createQueryBuilder()
    ->select($qb->expr()->count('abonnement'));
    ->from('TeeltFicheBundle:Abonnement', 'abonnement')
;
于 2012-11-02T08:14:20.277 に答える