コードを実行すると、Doctrine はデータベースの値を 0 に変更しますが、値を変更したことはありません。このフィールドには Setter-Method さえありません。
フィールドは ID の一部です。
Doctrine が値を変更するのはどうしてでしょうか?
編集
フィールドはエンティティ 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
は 2 回使用されます。フィールド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
が 1 回だけ使用されるようにマッピングを変更しても、問題はありません。
元の形式でのマッピング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 を二重に使用すると、この影響が生じる可能性がありますか?