Доктрина: есть ли способ использовать связанную сущность в findBy

У меня есть объект "сотрудник", который связан с одним или несколькими объектами "менеджер". Поэтому я использую таблицу соединений и связь в сущности сотрудника следующим образом:

/**
* @ManyToMany(targetEntity="manager_entity")
* @JoinTable(name="manager_employees",
* joinColumns={@JoinColumn(name="emp_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="manager_id", referencedColumnName="id", unique=true)}
* )
*/
protected $managers;

это уже работает. но теперь я хочу получить всех сотрудников конкретного менеджера. поэтому я спрашиваю, возможно ли сделать что-то вроде этого:

$mgr = $this->em->getRepository ( 'Entities\manager' )->findOneBy ( array (
                "alias" => $this->get('alias'));
// only pseudo code - i know that $managers is a list of managers and $mgr cannot be compared to that
$empList = $this->em->getRepository('Entities\employee')->findBy(array("managers" => $mgr));

1 ответ

Добавьте такую ​​функцию в ваш репозиторий:

public function findByManager($managerId)
{
    return $this->getEntityManager()
        ->createQueryBuilder()
        ->from('employee', 'e')
        ->innerJoin('e.managers m')
        ->where('m.Id = :managerId')
        ->setParameter('managerId', $managerId)
        ->getQuery()
        ->getResult();
}

А потом просто используйте:

$employee = $repository->findByManager($manager->getId());
Другие вопросы по тегам