使用QueryBuilder将NOT IN与两个实体匹配

时间:2013-07-02 14:49:46

标签: php symfony doctrine query-builder

我有两个实体ServeApp和App。它们都与AppPage有关系。我正在尝试获得具有应用程序所没有的AppPages的ServeApps。

因此,ServeApps.appPages不应包含Apps.appPages包含的相同AppPages。

我正在尝试编写类似于

的DQL查询
SELECT ServeApps WHERE ServeApps.appPages NOT IN Apps.appPages

但我不知道如何去做。我尝试了$ queryBuilder-> whereNotIn(),但我想这个方法不存在?

任何帮助将不胜感激:)

编辑:

我最终改变了我的做法。由于AppPages与ServeApps和Apps有很多关系,我做了以下几点:

SELECT sa FROM ServeApps sa WHERE sa.id NOT IN (
  SELECT ssa.id FROM AppPage ap JOIN ap.serveApps ssa WHERE ap.id = :apppage
)

我改变了逻辑,从等式中取出了应用程序,然后我以不同的方式检查了它。我还有一个版本,我将原始SQL用于计算ServeApps。

1 个答案:

答案 0 :(得分:0)

你的where-not-in语句应如下所示

$queryBuilder->where($queryBuilder->expr()->notIn('alias.field', $arrayOfValues));

您可以在Doctrine's documentation中找到所有表达式的参考。

作为旁注,where-in语句应如下所示

$queryBuilder->where($queryBuilder->expr()->in('alias.field', $arrayOfValues));