Конструктор запросов «addSelect» влияет на «addOrderBy» - PullRequest
0 голосов
/ 18 июня 2019

У меня есть Учение о ширине Symfony 4, две сущности / таблицы с отношением Fixture (одна) - Картинка (много).Обе таблицы имеют столбец с именем «порядок».Я загружаю (нетерпеливо) все светильники и их изображения.Я пытаюсь отсортировать результат запроса только по корневому объекту.

Это работает, как и ожидалось, когда не используется функция "addSelect".

$qb = $repository->createQueryBuilder('fixture');
$qb->innerJoin('fixture.pictures', 'pictures');
$qb->addOrderBy('fixture.order', 'ASC');

Результат:

SELECT f0_.name AS name_0, f0_.color AS color_1, f0_.`order` AS order_2, f0_.id AS id_3, f0_.valid_from AS valid_from_4, f0_.valid_to AS valid_to_5, f0_.disabled AS disabled_6 FROM fixture f0_ INNER JOIN fixture_picture f1_ ON f0_.id = f1_.fixture_id ORDER BY f0_.`order` ASC

Но когда я изменяю его на

$qb = $repository->createQueryBuilder('fixture');
$qb->innerJoin('fixture.pictures', 'pictures');
$qb->addSelect('pictures');  //eager loading
$qb->addOrderBy('fixture.order', 'ASC');

Я получаю:

SELECT f0_.name AS name_0, f0_.color AS color_1, f0_.`order` AS order_2, f0_.id AS id_3, f0_.valid_from AS valid_from_4, f0_.valid_to AS valid_to_5, f0_.disabled AS disabled_6, f1_.id AS id_7, f1_.`order` AS order_8, f1_.file_name AS file_name_9, f1_.file_path AS file_path_10, f1_.fixture_id AS fixture_id_11 FROM fixture f0_ INNER JOIN fixture_picture f1_ ON f0_.id = f1_.fixture_id ORDER BY f0_.`order` ASC, f1_.`order` ASC

Я действительно не уверен, почему существует "f1 _. order ASC".Я также попробовал это с

$qb->addOrderBy('pictures.order', 'ASC');

и для этого случая он работает (сортируется только по картинкам).

TL; DR;При использовании "$ qb-> addSelect ('pictures');"в построителе запросов добавлен дополнительный порядок ", f1 _. order ASC" в запросе SQL, даже если должна быть отсортирована только корневая сущность.Работает, когда «addSelect» не используется или когда запрос сортируется по объединенной таблице «pictures.order»

1 Ответ

0 голосов
/ 19 июня 2019

@ Эхимел был прав.Я использовал аннотацию @ORM \ OrderBy в Entity "Fixture" и забыл об этом.

...