Doctrine ORM Join для множества взаимосвязей

#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
  

Надеюсь, это поможет!