Получить данные из двух столбцов для сущности в Doctrine ORM QueryBuilder - PullRequest
0 голосов
/ 17 мая 2018

У меня такая проблема при получении данных с помощью Doctrine queryBuilder.

Как изменить этот SQL:

SELECT c.*, ct.value as name_pl
FROM cities c
LEFT JOIN cities_translations ct ON c.id = ct.city_id AND ct.language_code = 'pl'

(получение данных в списке из 2 таблиц)

В DQL с Doctrine Query Builder?

У меня уже есть этот объект:

/**
 * @ORM\Entity()
 */
class City
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    public $id

    /**
     * @ORM\Column(type="string", length=255)
     */
    public $slug;

    /**
     * @ORM\Column(type="string", length=255)
     */
    public $name;

    /**
     * @ORM\OneToMany(targetEntity="CityTranslation", mappedBy="city")
     */
    public $translations;
}

И запрос с помощью построителя запросов:

$queryBuilder
        ->select('c, ct.value as name_pl')
        ->from('cities', 'c')
        ->leftJoin('c.translations', 'ct', Join::WITH, 'ct.language_code = pl')
        ->getQuery()
        ->getResult();

Эффект заключается в том, что он правильно запрашивает данные из базы данных, но завершается неудачно при отображении данных в объект. Он возвращает массив из 2 элементов (первый - это объект City, а второй - строка и значение name_pl), а не только список объектов City (и name_pl как поле объекта City)

1 Ответ

0 голосов
/ 17 мая 2018

Попробуйте:

$queryBuilder
        ->select('c', 'c')
        ->from('cities', 'c')
        ->leftJoin('c.translations', 'ct', Join::WITH, 'ct.language_code = pl')
        ->addSelect('ct', 'ct')
        ->addSelect('ct.value', 'name_pl')
        ->getQuery()
        ->getResult();
...