2016-06-30 9 views
0

私はDoctrine2の新機能を使用しています。Doctrine2を使用した不要な結合条件

私は2つのテーブル、グループとユーザーを持っています。グループには会長、副会長、メンバーが参加することができます。私の問題は、私が議長または副会長としてユーザーとグループのリストを取得しようとするときに発生します。これは、グループエンティティの副会長の注釈です。

/** 
* @var string 
* 
* @ORM\ManyToMany(targetEntity="User") 
* @ORM\JoinTable(name="vicechairmen", 
*  joinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")} 
*) 
*/ 
private $vicechairmen; 

クエリビルダ

$qry = $this->entManager->getRepository("Entities\Local\Group")->createQueryBuilder("g"); 
$qry->leftJoin("g.vicechairmen", "gv", "WITH", "gv.id = g.id"); 
$qry->where($qry->expr()->eq('g.chairman', $id))->orWhere($qry->expr()->eq('gv.id', $id)); 

SELECT g.id FROM `group` g 
LEFT JOIN vicechairmen vg ON g.id = vg.group_id 
LEFT JOIN user u ON u.id = vg.user_id AND u.id = g.id 
WHERE g.chairman_id = 4 OR u.id = 4 

質問

(ちょっと)期待SQLクエリは

SELECT g.id FROM `group` g 
LEFT JOIN vicechairmen vg ON g.id = vg.group_id 
LEFT JOIN user u ON u.id = vg.user_id 
WHERE g.chairman_id = 4 OR u.id = 4 

だろうが、私は(別名を選択短縮と改称)を取得なぜdoctrine trですユーザーとグループをIDで接続するにはどうすればいいですか?そしてそれを禁止する方法?

答えて

0

あなたのアノテーションが強制的にそれを強制するのは、言い換えれば、ユーザーごとにグループテーブルを集計する必要があるからです。これをスキップするには、アノテーションに参加する人の数を削除する必要があります。 Doctrineはデータベースフィールドにリレーションシップがあるときに多対多の結合を作成します。

関連する問題