查询生成器与连接和条件在多对多关系中

时间:2015-05-26 14:46:49

标签: php symfony doctrine-orm doctrine symfony-2.3

我与Employee和MembreFamille有很多关系。我希望得到所有拥有员工的MembreFamilles。 这是我的问题:

class MembreFamilleRepository extends EntityRepository
{
    public function getMembres($emp)
    {
        $qb = $this->createQueryBuilder('a');
        $qb
            ->leftJoin('a.employees', 'employees');
        $qb
            ->where('employees.id = :id')
            ->setParameter('id', $emp);
        return $qb
            ->getQuery()
            ->getResult()
            ;
    }
}

当我在控制器中测试此函数时,函数返回0结果。

员工实体中的映射:

 /**
     * @ORM\ManyToMany(targetEntity="PFE\EmployeesBundle\Entity\MembreFamille", cascade={"persist"})
     */
    private $membreFamilles;

MembreFamille实体中的映射:

 /**
     * @ORM\ManyToMany(targetEntity="PFE\UserBundle\Entity\Employee", cascade={"persist"})
     */
    private $employees;

Controller中的使用($ employee是Employee Entity的一个实例):

$list = $em->getRepository('PFEEmployeesBundle:MembreFamille')->getMembres($employee->getId());

2 个答案:

答案 0 :(得分:1)

您可以使用名为" MEMBER OF"

的构造
class MembreFamilleRepository extends EntityRepository
{
    public function getMembres($emp)
    {
        return $this->createQueryBuilder('a');
            ->where(':employee MEMBER OF a.employees')
            ->setParameter('employee', $emp)
            ->getQuery()
            ->getResult()
        ;
    }
}

您可以使用名为" MEMBER OF"

的构造

答案 1 :(得分:1)

您需要为ManyToMany关联添加JoinTable并设置拥有和反面:

/**
 * @ORM\ManyToMany(targetEntity="PFE\EmployeesBundle\Entity\MembreFamille",
 *   cascade={"persist"}, mapped="employees")
 */
private $membreFamilles;


.................................


/**
 * @ORM\ManyToMany(targetEntity="PFE\UserBundle\Entity\Employee", cascade={"persist"}, inversedBy="membreFamilles")
 * @ORM\JoinTable(name="membre_familles_employees")
 */
private $employees;