2015-05-26 2 views
0

У меня есть много-много отношений с Employee и MembreFamille. И я хочу получить все MembreFamilles, у которых есть Сотрудник. Это мой запрос:Query Builder со связью и условием во многих отношениях.

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 результат.

Отображение в Сотрудника Entity:

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

по картированию в MembreFamille Entity:

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

Использование в контроллере ($ сотрудник является экземпляром Employee Entity):

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

$ эми является целым числом ? Можете ли вы также показать нам сопоставление между сотрудником и membreFamilie? –

+0

Да $ emp - целое число. – mehdi

+0

Кажется, что ваш запрос извлекает каждый MembreFamille, у которого есть сотрудник с идентификатором $ emp, а не каждый MembreFamille, у которого есть сотрудник (любой из них). – Hakim

ответ

1

Вы должны добавить JoinTable для ManyToMany ассоциации и установить Обладание и обратные стороны:

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

Вы можете использовать конструкцию под названием «ЧЛЕН».

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

Вы можете использовать конструкцию под названием «ЧЛЕН»

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