1

symfony2/doctrine2 を使用して、以下のシステムにアプローチするよりクリーンな方法があるかどうか疑問に思っています。

私は現在3つのエンティティを持っています

エンティティ A - クラス B との多対 1 関係、クラス C との 1 対多関係 エンティティ B - クラス A との 1 対多関係、クラス C との 1 対多関係
エンティティ C - クラス A および B との多対 1 関係。

$entityA->getEntityB()->getEntityC() を実行すると、エンティティ B に割り当てられたすべての C エンティティが返されますが、実際に必要なのは、エンティティ B とエンティティ A の両方に割り当てられているすべてのエンティティ C エンティティです。それが理にかなっていれば、基本的にゲッターチェーンを認識したいと思います。

現時点では、エンティティ A を getEntityC メソッドに渡し、不要な値を除外する必要があります。これは、より多くのオブジェクトやコードの他の部分を処理するときに少し乱雑になり始めています。

これを設定して、最後のゲッターが直接の親だけでなく、両方の親からの関係を強制する方法はありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

getter で値を取得しようとするのではなく、DoctrineQueryBuilder でクエリを作成し、複数の左結合を使用することを強くお勧めします。たとえば、次のようなものです。

$repository = $this->getDoctrine()->getRepository('GreatBundle:Entity');
$q = $repository->createQueryBuilder('e1', 'e2', 'e3')->leftJoin('e1.e2', 'e2')->leftJoin('e1.e3', 'e3');
$columns = array(
    'e1.id',
    'e2.id as e2_id',
    'c3.id as e3_id',
);
$result = $q->select($columns)->getQuery()->getArrayResult();

申し訳ありませんが、使用例を完全には取得できませんでしたが、それに合うようにクエリを再作成する必要があります。

于 2013-11-11T14:39:53.067 に答える