2012-08-23 27 views
1

我是一個教條的起始者,我無法弄清楚如何進行查詢。選擇多對多的參數

我與Symfony2和我有兩個實體:EquipmentDomain
他們通過雙向ManyToMany相關。

在我的DomainRepository我想有一個Equipment相關Domains

我已經試過,但它不返回任何東西:

public function getDomainsRelatedToEquipment($id) 
{ 
    $qb = $this->createQueryBuilder('d'); 
    $qb->addSelect('e'); 
    $qb->leftJoin('d.equipements','e'); 
    $qb->where('e.id = :id')->setParameter('id', $id); 

    return $qb->getQuery()->getArrayResult(); 
} 

你能幫我做,讓我每Domain包含一個建設者的Equipment ID爲$id

回答

0

你必須使用Expr::in()

/** 
* @param int $id Equipment ID 
* @return array 
*/ 
public function getDomainsRelatedToEquipment($id) 
{ 
    $qb = $this->createQueryBuilder('d'); 
    $qb->where($qb->expr()->in('e.domains', array('?1')); 

    $q = $qb->getQuery(); 
    $q->setParameter(1, $id); 

    return $q->execute(); 
} 

免責聲明:我還沒有測試我的代碼!

0

我試過了,但它不起作用。 我做了一個動作來進行測試:

public function testAction() { 
$em = $this->getDoctrine()->getEntityManager(); 
    $qb = $em->getRepository('myBundle:Equipement')->createQueryBuilder('e'); 
    $qb->where($qb->expr()->in('e.domaines', array('?1'))); 
    $q = $qb->getQuery(); 
    $q->setParameter(1, 1); 

    var_dump($q->getArrayResult()); 

} 

但我有一個語義錯誤

[Semantical Error] line 0, col 61 near 'domaines IN(': Error: Invalid PathExpression.  
StateFieldPathExpression or SingleValuedAssociationField expected. 

我的類設備公司有場domaines。

class Equipement 
{ 
[...] 

/** 
* @ORM\ManyToMany(targetEntity="Domaine", inversedBy="equipements") 
*/ 
private $domaines; 

我通過構建一個數組這樣可以避免該問題:

$domaines = array(); 
    $em = $this->getDoctrine()->getEntityManager(); 
    $equipement = $em->getRepository('iMDEODISAASBundle:Equipement')->find($equipementId); 
    $repoDomaine = $em->getRepository('iMDEODISAASBundle:Domaine'); 
    $idx = 0; 
    foreach ($equipement->getDomaines() as $domaine) { 
     $d= $repoDomaine->get($domaine->getId()); 
     $domaines[$idx]=$d[0]; 
     $idx++; 
    } 
    return $domaines; 

,但我想這是不是這樣做的最佳方式。