Я пытаюсь выбрать пользователя, которого нет в моей таблице действий.
<?php
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* @method User|null find($id, $lockMode = null, $lockVersion = null)
* @method User|null findOneBy(array $criteria, array $orderBy = null)
* @method User[] findAll()
* @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UserRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, User::class);
}
/**
* @return User[] Returns an array of User objects
*/
public function findByCriteres($reqsearch = null)
{
$qb = $this->createQueryBuilder('u');
//Create subquery
$sub = $this->createQueryBuilder('a');
$sub = $sub->innerJoin('a.actions', 'act');
$qb->andWhere($qb->expr()->not($qb->expr()->exists($sub->getDQL())));
return $qb->getQuery()->getResult();
}
При выполнении дампа для просмотра результатов у меня есть 2 вхождения в моем объекте User:
array:2 [▼
0 => User {#670 ▶}
1 => User {#3280 ▶}
]
И только один в моей сущности Action:
array:1 [▼
0 => User {#3280 ▶}
]
Поэтому я должен получить следующий результат:
array:1 [▼
0 => User {#670 ▶}
]
Но я получаю только пустой результат:
[]
Делая дамп на моем "getDQL", я получаю этот запрос, который мне кажется хорошим (у меня не отображаются ошибки):
"SELECT u FROM App\Entity\User u WHERE NOT(EXISTS(SELECT z FROM App\Entity\User z INNER JOIN z.actions act))"
Все выглядит хорошо, кроме моего результата!
Спасибо за вашу помощь.