选择多对多whith参数



我是一个有教条的初学者,不知道如何进行查询。

我在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();
}

你能帮我做一个生成器吗?它给我每个包含id为$idEquipmentDomain

您必须使用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();
}

免责声明:我还没有测试我的代码!

我试过了,但不起作用。我做了一个测试动作:

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. 

我的班级装备有一个领域。

class Equipement
{
[...]
/**
 * @ORMManyToMany(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;

但我想这不是最好的方法。

相关内容

  • 没有找到相关文章

最新更新