#join #orm #doctrine-orm
#Присоединиться #orm #doctrine-orm
Вопрос:
У меня есть объект User:
class User extends Entity implements UserInterface, ProviderInterface
{
/**
* @var int
* @ORMId
* @ORMColumn(name="user_id", type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var DoctrineCommonCollectionsCollection
* @ORMManyToMany(targetEntity="ApplicationEntityChild", mappedBy="parents")
*/
protected $children;
...
}
И дочерняя сущность:
class Child extends Entity
{
/**
* @var int
* @ORMId
* @ORMColumn(name="child_id", type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var ApplicationEntityClassroom
*
* @ORMManyToOne(targetEntity="ApplicationEntityClassroom")
* @ORMJoinColumns({
* @ORMJoinColumn(name="classroom_id", referencedColumnName="classroom_id")
* })
*/
protected $classroom;
/**
* @var DoctrineCommonCollectionsCollection
* @ORMManyToMany(targetEntity="ApplicationEntityUser", inversedBy="children")
* @ORMJoinTable(name="child_parent",
* joinColumns={@ORMJoinColumn(name="child_id", referencedColumnName="child_id")},
* inverseJoinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="user_id")}
* )
*/
protected $parents;
...
}
Что мне нужно сделать, так это добавить в UserRepository условие для получения пользователей, чьи дети находятся в классе X. Я не видел ни одного примера создания предложений join для отношений ManyToMany. У вас есть какая-нибудь идея или хороший пример?
Заранее спасибо.
Ответ №1:
Самым простым способом было бы использовать запрос DQL, я думаю, что он должен быть близок к тому, что вы хотите:
SELECT u
FROM ApplicationEntityUser u
JOIN u.children ch
JOIN c.classroom cr
WHERE cr.id = :classroom
GROUP BY u
Надеюсь, это поможет!