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

Опитвам се да направя просто ->find(), използвайки doctrine/orm 2.5.1.

Заявката е доста проста:

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

Но това генерира сложна заявка:

ИЗБЕРЕТЕ s0_.number AS number_0, s0_.state AS state_1, s0_.completed_at AS completed_at_2, s0_.items_total AS items_total_3, s0_.adjustments_total AS adjustments_total_4, s0_.total AS total_5, s0_.created_at AS created_at_6, s0_.updated_at AS updated_at_7 .deleted_at AS deleted_at_8, s0_.id AS id_9, s0_.expires_at AS expires_at_10, s1_.currency AS currency_11, s1_.checkout_state AS checkout_state_12, s1_.payment_state AS payment_state_13, s1_.shipping_state AS shipping_state_14, s2_.quantity AS quantity_15, s2_.unit_price AS unit_price_16, s2_.adjustments_total AS adjustments_total_17, s2_.total AS total_18, s2_.is_immutable AS is_immutable_19, s2_.id AS id_20, s1_.channel_id AS channel_id_21, s1_.shipping_address_id AS shipping_address_id_22, s1_.billing_address_id AS billing_address_id_23, s1_.customer_id AS customer_id_24 , s1_.offer_id AS offer_id_25, s2_.order_id AS order_id_26, s2_.variant_id AS variant_id_27 FROM sylius_order s1_ LEFT JOIN sylius_order_item s2_ ON s1_.id = s2_. order_id WHERE (s1_.id = 10) И (s1_.deleted_at Е 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