Php 无法在非聚合查询中添加对未定义的结果变量具有条件

Php 无法在非聚合查询中添加对未定义的结果变量具有条件,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我在实体存储库中执行此查询,并不断获取 无法在未定义的结果变量上添加having条件 但是查询根本没有聚合。为什么这会发生在我身上 public function getPersonalizableItemsByOwner(User $owner) { $qb = $this ->getEntityManager() ->createQuery('SELECT pi FROM '.$this->getEntityName().' pi W

我在实体存储库中执行此查询,并不断获取

无法在未定义的结果变量上添加having条件

但是查询根本没有聚合。为什么这会发生在我身上

public function getPersonalizableItemsByOwner(User $owner)
{
    $qb = $this
        ->getEntityManager()
        ->createQuery('SELECT pi FROM '.$this->getEntityName().' pi WHERE order_id = :owner_id AND (deletedAt IS NULL OR deletedAt > :referenceDate)')
        ->setParameters(array('owner_id' => $owner->getId(), 'referenceDate' => date('Y-m-d H:i:s')));

        return $qb->getResult();
}

PS:我对条令知之甚少,我的任务是通过KnpLabs SoftDeleteable trait添加软删除支持,但仅在某些特定情况下,因此我无法使用全局可用的筛选器,必须手动实现它。

DQL中有一个输入错误,该字段应为ownerId,而不是order\u id。此外,需要提供每个字段的名称空间,如:

public function getPersonalizableItemsByOwner(User $owner)
{
    $qb = $this
        ->getEntityManager()
        ->createQuery('SELECT pi FROM '.$this->getEntityName().' pi WHERE pi.ownerId = :owner_id AND (pi.deletedAt IS NULL OR pi.deletedAt > :referenceDate)')
        ->setParameters(array('owner_id' => $owner->getId(), 'referenceDate' => date('Y-m-d H:i:s')));

    return $qb->getResult();
}

您不能检查deletedAt是否为null,而是检查deletedAt的ID是否为null

更改为:
deletedAt.id为NULL
应该可以修复它


编辑:今天早上收到此错误,并修复了此错误,原因是:

我不知道这是否是导致错误的原因,但您应该在列名前面加上
pi
,因为您已将表别名为pi,例如
pi.order\u id