我有一个多对多连接User -> Address
并使用软可删除插件。
我需要编写一个查询来查找所有没有与其链接地址的用户。在不使用软删除的情况下,以下工作正常:
$qb = $this->getRepository()->createQueryBuilder('users');
$qb->andWhere('users.addresses IS EMPTY');
现在,如果启用了 softdeletableAddress
并且我删除了用户的所有地址,它仍然会在结果中返回这个用户。发生这种情况是因为上述查询转换为以下 SQL(简化):
SELECT * FROM users u WHERE
(SELECT COUNT(*) FROM user_address ua WHERE ua.user_id = u.user_id) = 0)
如您所见,它没有加入Address
实体,因此对它的deletedAt
列一无所知。
所以我的问题是如何重写我的 DQL 查询以使其知道 deletedAt 并过滤掉此类记录。
谢谢!