Многие сущности пользователей имеют много сущностей Домов, использующих объединенную таблицу в аннотации
class User
{
/**
* @ORM\ManyToMany(targetEntity="House")
* @ORM\JoinTable(name="house_user",
* joinColumns={@ORM\JoinColumn(name="user_uuid", rerencedColumnName="uuid") },
* inverseJoinColumns={@ORM\JoinColumn(name="house_uuid", ferencedColumnName="uuid") }
* }
* )
*/
public $houses;
Мне нужно получить всех соседей из всех домов, где проживает данный пользователь, включая самого пользователя.Также мне нужно получить счетчик этих соседей.
Используя SQL, я могу получить это, соединяя объединенную таблицу 2 раза:
select DISTINCT usr.*
FROM users usr
LEFT JOIN house_user houseDUser ON houseDUser.user_uuid = 'uuid-v4-goes-here'
LEFT JOIN house h on houseDUser.housing_complex_uuid = h.uuid
LEFT JOIN house_user houseUser ON houseUser.housing_complex_uuid = h.uuid
WHERE usr.uuid = houseUser.user_uuid
И поэтому я могу получить соседей, используя QueryBuilder (но не такэлегантно, я думаю):
$qb = $this->reateQueryBuilder('usr')
->addSelect('users')
->leftJoin(HouseUser::class, 'houses', Join::WITH, 'usr MEMBER OF houses.users')
->leftJoin(User::class, 'users', Join::WITH, 'users MEMBER OF houses.users')
->where('usr = :userUuid')
->setParameter('userUuid', (string)$user->getUuid());
$paginator = new Paginator($qb);
$count = count($paginator);
Но как счет я получал 1 каждый раз.Есть ли правильный способ сделать такие запросы?