0

我有两个实体 ServeApp 和 App。它们都与 AppPage 有关系。我正在尝试获取具有 AppPages 而 App 没有的 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。

4

1 回答 1

0

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

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

您可以在Doctrine 的文档中找到所有表达式的参考。

附带说明一下,where-in 语句应如下所示

$queryBuilder->where($queryBuilder->expr()->in('alias.field', $arrayOfValues));
于 2013-07-02T23:24:22.990 回答