原则查询生成器没有给出所有结果:(x,y)中的多对多搜索ID



我在Symfony 2.8应用程序中使用学说查询生成器获取结果时遇到了一些麻烦:

我这里有 3 个实体:

  • 艺术家
  • 类别

所有歌曲至少有 1 位艺术家和 1 个类别

歌曲艺术家有多对多的关系,与类别也有多对多的关系

我想让歌曲实体与赋予此功能的一首歌曲具有相同的艺术家或类别:

public function findRelatedSongs($song)
{
$em = $this->getEntityManager();
$artistsIds = $this->getArtistsIds($song);
//returns a string like '1,2,3'
$categoriesIds = $this->getCategoriesIds($song);
//returns a string like '1,2,3'
$q = $em->getRepository("BeatAdvisorBundleEntitySong")
->createQueryBuilder('s')
->join('s.artists', 'a')
->join('s.categories', 'c')
->where('a.id in (:artistsIds)')
->orWhere('c.id in (:categoriesIds)')
->andWhere('s.id <> :songId')
->setParameter('artistsIds', $artistsIds)
->setParameter('categoriesIds', $categoriesIds)
->setParameter('songId', $song->getId())
->getQuery();
$sql = $q->getSql();
// here I can read the sql query generated
$result = $q->setMaxResults(16)
->getResult();
return $result;
}

它给了我相同的艺术家的相关歌曲,但没有类别。

我写这个的方式有问题吗?

如果我复制并粘贴 sql 查询,将 id 设置为参数,例如something_id in (1,2)它工作得很好......

编辑

现在我知道只有艺术家 x 的歌曲 A 将匹配一些只有艺术家 x 的歌曲; 类别相同。 可能是类型(字符串 VS int(的问题,导致in(x,y)而不是in (x)?...

问题

据我所知,Doctrine使用DQL(Doctrine查询语言(,而不是SQL。表达式有时有点不同。可以使用 QueryBuilders 表达式对象以编程方式生成表达式。

$qb->where(
$qb->expr()->in('a.id', ':artistsIds'),
$qb->expr()->eq('s.id', ':songId')
);

参考: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html

好的,我的错误是将我的参数设置为字符串(内爆的 id 数组(。

我不得不给出整数数组本身...

相关内容

  • 没有找到相关文章

最新更新