Метод leftJoin
Метод leftJoin класса QueryBuilder
добавляет к DQL-запросу конструкцию
LEFT JOIN. Он соединяет основную сущность
с указанной сущностью и возвращает все строки
из левой таблицы, даже если в правой нет
соответствующих записей. Первым параметром
передаётся связь (поле сущности), вторым -
алиас присоединяемой сущности, третьим -
условие WITH (необязательно).
Синтаксис
leftJoin(join, alias, condition = null)
Пример
Давайте выберем статьи вместе с их категориями, включая статьи без категории:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findAllWithCategory(): array
{
$qb = $this->createQueryBuilder('a');
$qb->leftJoin('a.category', 'c')
->addSelect('c');
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте добавим условие WITH к соединению,
чтобы отфильтровать присоединяемые записи:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findWithActiveCategory(): array
{
$qb = $this->createQueryBuilder('a');
$qb->leftJoin('a.category', 'c', 'WITH', 'c.active = :active')
->addSelect('c')
->setParameter('active', true);
return $qb->getQuery()->getResult();
}
}
?>
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы в Doctrine -
метод
join,
который выполняет обычное соединение таблиц -
метод
innerJoin,
который выполняет внутреннее соединение таблиц -
метод
where,
который задаёт условие выборки записей