使用加入原则查询语言时的额外位置


Extra Where when using Join in Doctrine Query Language

我的实体库类中有以下代码:

 $qb
        ->select('d')
        ->addOrderBy('d.dtrDate', 'DESC')
        ->where($qb->expr()->isNotNull('d.deletedAt'))
        ->leftJoin('d.user', 'u')
        ->where('u.id = :user_id')
        ->setParameter('user_id', $user->getId());

所以基本上,我不想选择deletedAt属性不为null的实体。然而,它给了我一个这样的查询:

>

 SELECT 
  d0_.id AS id_0, 
  d0_.dtr_date AS dtr_date_1, 
  d0_.clock_in AS clock_in_2, 
  d0_.clock_out AS clock_out_3, 
  d0_.total_time AS total_time_4, 
  d0_.memo AS memo_5, 
  d0_.last_update_IP AS last_update_IP_6, 
  d0_.created_at AS created_at_7, 
  d0_.updated_at AS updated_at_8, 
  d0_.deleted_at AS deleted_at_9, 
  d0_.user_id AS user_id_10 
FROM 
  daily_time_record d0_ 
  LEFT JOIN user u1_ ON d0_.user_id = u1_.id 
WHERE 
  u1_.id = ? 
ORDER BY 
  d0_.dtr_date DESC

正如你所看到的,我的第一个地方没有人叫我。那么我该怎么做呢?

您应该阅读文档,或者阅读ORM源代码来了解实际工作情况。简而言之,你的问题的答案是:

$qb
        ->select('d')
        ->leftJoin('d.user', 'u')
        ->where($qb->expr()->isNotNull('d.deletedAt'))
        ->andWhere('u.id = :user_id')
        ->setParameter('user_id', $user->getId())
        ->orderBy('d.dtrDate', 'DESC');