У меня такая проблема при получении данных с помощью 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)