使用错误的表别名生成查询的原则


Doctrine generating query with wrong table alias

我正在尝试使用doctrine/orm 2.5.1做一个简单的->find()

查询非常简单:

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

但这会产生一个复杂的查询:

选择s0_.编号作为number_0,s0_.状态为state_1,s0_.已完成_在completed_at_2,s0_.项目_总计作为items_total_3,s0_.调整_总计作为adjustments_total_4,s0_.total 作为total_5,s0_.created_at AS created_at_6,s0_.update_at AS updated_at_7,s0_.deleted_at AS deleted_at_8, s0_.id 作为id_9,s0_.expires_at 作为expires_at_10,s1_.currency 作为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 作为unit_price_16,s2_.weaks_total 作为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 作为 order_id_26,s2_.variant_id 作为variant_id_27从sylius_order s1_左连接sylius_order_item s2_在 s1_.ID = s2_.order_id 上,其中 (s1_.id = 10( 和 (s1_.deleted_at 为空('

出现以下错误:

SQLSTATE[42S22]:找不到列:1054 "字段列表"中的未知列"s0_.number">

我可以看到s0_没有在查询的任何地方定义。这些别名是自动的,我只是不明白为什么它使用 s0_ 然后跳过它以s1_具有 s0_ 上提到的列的FROM

我刚刚花了一个小时在同一个问题上;你可能犯了和我一样的错别字错误。

对我来说,问题在于.yml架构定义。在我定义表之间关系的部分中,我有这个目标实体:

targetEntity: mlEmailNotif

而不是

targetEntity: MlEmailNotif

因此,小写的"m"使 doctrine 为新表创建一个新的别名(php 比较区分大小写(。

问题就在这里: SELECT s0_.number as number_0 - 似乎没有定义列号,或者映射(注释,yml,php(和模式(mysql(之间存在差异。

如果你运行php app/console doctrine:schema:update --dump-sql,是否有任何SQL命令?如果是,则必须根据映射的实体更新架构。