コードを実行すると、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 を二重に使用すると、この影響が生じる可能性がありますか?