2016-06-30 2 views
0

Я довольно новичок в Doctrine2, и я пытаюсь изучить его, просто используя его.Нежелательное условие присоединения с использованием Doctrine2

У меня есть две таблицы, группа и пользователь. Группа может иметь председателя, заместителей председателя и членов. Моя проблема возникает, когда я пытаюсь получить список групп с пользователем в качестве председателя или заместителя председателя. Это моя аннотация заместителя председателя в группе.

/** 
* @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)); 

(вроде) Ожидаемый 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 

, но я получаю (сокращенный выбор и переименован псевдонимами)

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 

рассмотрен вопрос почему доктрина tr ying для подключения пользователя и группы по их идентификаторам? И как запретить это?

ответ

0

Это потому, что ваша аннотация усиливает его, в лучшем случае я должен сказать, что вы объединяете таблицу групп пользователем. Вы должны удалить многие, чтобы присоединиться к своей аннотации, чтобы пропустить это. Doctrine создаст много для многих, когда вы будете иметь отношение в своих полях базы данных.

Смежные вопросы