Получить соседей во многих отношениях с доктриной - PullRequest
0 голосов
/ 14 ноября 2018

Многие сущности пользователей имеют много сущностей Домов, использующих объединенную таблицу в аннотации

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 каждый раз.Есть ли правильный способ сделать такие запросы?

...