当我执行我的代码时,Doctrine 将数据库中的一个值更改为 0,尽管我从未更改过该值。该字段甚至没有 Setter-Method。
该字段是 ID 的一部分。
教义怎么会改变价值?
编辑
该字段属于实体PageNamespaceTranslation,被学说修改的字段是language_id
。
我使用 XML,而不是注释。
<entity name="exodus\domain\meta\pages\namespaces\PageNamespaceTranslation" table="page_namespace_translation">
<id name="translated" association-key="true" />
<id name="language_id" type="integer" column="lang_id" />
<many-to-one target-entity="PageNamespace" field="translated" inversed-by="translations">
<join-column name="namespace_id" referenced-column-name="namespace_id" />
</many-to-one>
更新
我想我已经本地化了问题:我有一个名为的实体InformationObjectAliasPageTranslation
,它也有一个名为language_id
. 该列lang_id
使用了两次:用于字段language_id
和作为 PageNamespaceTranslation 的外键的一部分。
当我进行以下查询时会出现问题:
SELECT p FROM exodus\domain\meta\pages\InformationObjectAliasPageTranslation p
JOIN p.namespace ns
JOIN ns.translated nst
WHERE nst.namespaceId = :ns AND p.language_id = :langId AND p.title = :title
当我添加ns
和nst
选择时,不会发生问题。
但是,当我更改映射以使该列lang_id
仅使用一次时,也没有问题。
InformationObjectAliasPageTranslation
原始形式的映射:
<entity name="exodus\domain\meta\pages\InformationObjectAliasPageTranslation" table="page_translation">
<id name="translated" association-key="true" />
<id name="language_id" type="integer" column="lang_id" />
<many-to-one target-entity="InformationObjectAliasPage" field="translated" inversed-by="translations">
<join-column name="page_id" referenced-column-name="page_id" />
</many-to-one>
<many-to-one target-entity="exodus\domain\meta\pages\namespaces\PageNamespaceTranslation" field="namespace">
<join-columns>
<join-column name="namespace_id" referenced-column-name="namespace_id" />
<join-column name="lang_id" referenced-column-name="lang_id" />
</join-columns>
</many-to-one>
lang_id 列的双重使用会导致这种效果吗?