我是学说的初学者,我无法弄清楚如何进行查询。
我和Symfony2在一起,我有两个实体:Equipment
和Domain
。
它们与双向的ManyToMany有关。
在我的DomainRepository
我想要Domains
的相关Equipment
。
我试过这个,但它没有返回任何内容:
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
{{1}}个{{1}}的建筑商?
答案 0 :(得分: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();
}
免责声明:我还没有测试我的代码!
答案 1 :(得分: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.
我的班级Equipement有一个字段域。
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;
但我想这不是最好的方法。