我有两个实体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。
答案 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));