1

当我执行我的代码时,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

当我添加nsnst选择时,不会发生问题。

但是,当我更改映射以使该列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 列的双重使用会导致这种效果吗?

4

1 回答 1

0

It seems that Doctrine does not support sharing of columns. It behaves strange in that case and inserts are not possible because columns are repeated.

I now use a solution with redundancy instead of using shared columns and it seems to be a better solution after all because these date is often read and hardly ever changed.

于 2013-08-29T00:35:23.257 回答