多対多の接続がUser -> Address
あり、ソフト削除可能なプラグインを使用しています。
アドレスがリンクされていないすべてのユーザーを検索するクエリを作成する必要があります。論理的な削除を使用しないと、次のように問題なく動作します。
$qb = $this->getRepository()->createQueryBuilder('users');
$qb->andWhere('users.addresses IS EMPTY');
ここで、softdeletable が有効になってAddress
いて、ユーザーのすべてのアドレスを削除した場合でも、結果にこのユーザーが返されます。これは、上記のクエリが次の SQL (簡略化) に変換されるために発生しています。
SELECT * FROM users u WHERE
(SELECT COUNT(*) FROM user_address ua WHERE ua.user_id = u.user_id) = 0)
ご覧のとおり、Address
エンティティに参加していないため、deletedAt
列に関する手がかりがありません。
だから私の質問は、DQLクエリを書き直してdeletedAtを認識させ、そのようなレコードを除外する方法です。
ありがとう!