Доктрина, генерирующая запрос с неправильным псевдонимом таблицы

Я пытаюсь сделать простой ->find(), используя доктрину/форму 2.5.1.

Запрос довольно простой:

$this->get('order_repository')->find(10);

Но это генерирует сложный запрос:

ВЫБРАТЬ s0_.number КАК number_0, s0_.state КАК состояние_1, s0_.completed_at КАК завершено_at_2, s0_.items_total КАК items_total_3, s0_.adjustments_total КАК корректировки_total_4, s0_.total КАК total_5, s0_.created_at КАК created_at_6, s0_.updated_at КАК updated_at_7, s0_.updated_at КАК updated_at_7, s0_.adjustments_total .deleted_at КАК delete_at_8, s0_.id КАК id_9, s0_.expires_at КАК expires_at_10, s1_.currency КАК валюта_11, s1_.checkout_state КАК checkout_state_12, s1_.payment_state КАК Payment_state_13, s1_.shipping_state КАК shipping_state_14, s2_.quantity КАК количество_.15, _s2_ А.С. unit_price_16, s2_.adjustments_total А.С. adjustments_total_17, s2_.total А.С. total_18, s2_.is_immutable А.С. is_immutable_19, s2_.id А.С. id_20, s1_.channel_id AS channel_id_21, s1_.shipping_address_id AS shipping_address_id_22, s1_.billing_address_id А.С. billing_address_id_23, s1_.customer_id AS customer_id_24 , s1_.offer_id КАК offer_id_25, s2_.order_id КАК order_id_26, s2_.variant_id КАК variant_id_27 ОТ sylius_order s1_ ЛЕВОЕ СОЕДИНЕНИЕ sylius_order_item s2_ ON s1_.id = s2_. order_id ГДЕ (s1_.id = 10) И (s1_.deleted_at IS NULL)'

Со следующей ошибкой:

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «s0_.number» в «списке полей»

Я вижу, что s0_ нигде в запросе не определено. Этот псевдоним является автоматическим из доктрины, я просто не понимаю, почему он использует s0_, а затем пропускает его до s1_ в FROM, в котором есть столбцы, упомянутые в s0_.*


person samura    schedule 01.10.2015    source источник
comment
Не могли бы вы показать определение order_repository? Также попробуйте очистить кеш doctrine:cache:clear-metadata и doctrine:cache:clear-query   -  person Stafox    schedule 21.10.2015


Ответы (2)


Я только что потратил час на эту же проблему; Вероятно, вы сделали ту же опечатку, что и я.

Проблема для меня была в определении схемы .yml. В разделе, где я определял отношения между своими таблицами, у меня был этот целевой объект:

targetEntity: mlEmailNotif

вместо

targetEntity: MlEmailNotif

Таким образом, строчная буква «m» заставляет доктрину создавать новый псевдоним для новой таблицы (сравнение php чувствительно к регистру).

person hakimoun    schedule 26.02.2016
comment
Святой моли. Я не уверен, что когда-либо нашел бы источник этого без этого комментария. Большое спасибо! Вы могли бы подумать, что Doctrine может выдать ошибку проверки при проверке схемы, если чувствительность к регистру может привести к фатальным ошибкам в дальнейшем. - person Mvin; 12.03.2019

Проблема здесь: SELECT s0_.number as number_0 - кажется, что номер столбца не определен или есть разница между отображением (аннотации, yml, php) и схемой (mysql).

Есть ли какая-либо команда SQL, если вы запустите php app/console doctrine:schema:update --dump-sql? Если это так, вам необходимо обновить схему в соответствии с сопоставленными объектами.

person Gabi Udrescu    schedule 21.10.2015