1

コードを実行すると、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

追加nsnstて選択すると、問題は発生しません。

ただし、列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 を二重に使用すると、この影響が生じる可能性がありますか?

4

1 に答える 1