Symfony 数组属性的IN子句等价

Symfony 数组属性的IN子句等价,symfony,doctrine-orm,dql,Symfony,Doctrine Orm,Dql,实际上,我有两个实体A和B,由多对多关系映射。 Doctrine用DQL可以访问的A.bElements和B.aElements属性表示这种关系,因此我想在我的查询中使用这些属性,因为此查询包括其他where子句,在同一查询中执行所有工作看起来都很好 我有一个子查询,它返回一些B元素,我想检查a.belents中是否至少有一个这样的元素。问题是IN子句只适用于一个值,而不是数组 以下是我的查询示例(针对搜索引擎): 这里我想要所有的“Livre”实体,它们的l.dessinaters属性中至少有

实际上,我有两个实体A和B,由多对多关系映射。 Doctrine用DQL可以访问的A.bElements和B.aElements属性表示这种关系,因此我想在我的查询中使用这些属性,因为此查询包括其他where子句,在同一查询中执行所有工作看起来都很好

我有一个子查询,它返回一些B元素,我想检查a.belents中是否至少有一个这样的元素。问题是IN子句只适用于一个值,而不是数组

以下是我的查询示例(针对搜索引擎):

这里我想要所有的“Livre”实体,它们的
l.dessinaters
属性中至少有一个子查询结果

我知道可以通过分别检索所有B和A元素,然后使用php检查是否存在公共元素来实现这项工作。也可以使用联接表,但我想原则的目的是避免直接使用这样的表

也许有人能帮我?也许问题还不够清楚,如果有必要的话,我可以试着重新解释一下。提前谢谢

编辑:

以下查询工作正常:

$qb->select('l')
    ->from('AppBundle:Livre', 'l')
    ->join('l.serie', 's')
    ->join('l.editeur', 'e')
    ->join('l.dessinateurs', 'd', 'WITH', 
        'd.nom LIKE :motcle 
        OR d.prenom LIKE :motcle 
        OR l.ISBN LIKE :motcle 
        OR l.cote LIKE :motcle 
        OR l.etat LIKE :motcle 
        OR l.edition LIKE :motcle
        OR s.libelle LIKE :motcle 
        OR e.nom LIKE :motcle')
    ->join('l.auteurs', 'a', 'WITH', 
        'a.nom LIKE :motcle 
        OR a.prenom LIKE :motcle 
        OR l.ISBN LIKE :motcle 
        OR l.cote LIKE :motcle 
        OR l.etat LIKE :motcle 
        OR l.edition LIKE :motcle
        OR s.libelle LIKE :motcle 
        OR e.nom LIKE :motcle')
    ->setParameter('motcle', '%'.$motcle.'%');

不幸的是,我不得不在两个join中重复others-LIKE子句,但这是另一个问题。ccKep下面的答案是完美的

你可以试一试:

$qb->select('l')
   ->from('AppBundle:Livre', 'l')
   ->join('l.dessinateurs', 'd', 'WITH', 'd.dessinateur=1 AND (d.nom LIKE :motcle OR d.prenom LIKE :motcle)')
   ->where("l.ISBN LIKE :motcle")
   ->orWhere("l.cote LIKE :motcle")
   ->setParameter('motcle', '%'.$motcle.'%');

谢谢你的回答!这似乎是正确的方法,当我要一份甜品时,这个查询给出了正确的结果。然而,其他条款似乎被忽略了(当我使用一个以美元为单位的ISBN时,我没有得到任何结果)。我猜这是因为join子句没有产生任何结果,但我希望它是可选的:如果没有脱盐水,但ISBN(或cote)匹配$motcle,那么应该重新检索这本书。我应该使用其他联接类型吗?我找到了一个解决方案,我用工作查询编辑了我的原始问题。您的解决方案是对我的问题(关于数组属性)的准确回答,所以这个问题就解决了。谢谢
$qb->select('l')
   ->from('AppBundle:Livre', 'l')
   ->join('l.dessinateurs', 'd', 'WITH', 'd.dessinateur=1 AND (d.nom LIKE :motcle OR d.prenom LIKE :motcle)')
   ->where("l.ISBN LIKE :motcle")
   ->orWhere("l.cote LIKE :motcle")
   ->setParameter('motcle', '%'.$motcle.'%');