当我执行我的代码时,Doctrine会将数据库中的值更改为0,尽管我从未更改过该值。这个领域甚至没有Setter-Method。
该字段是ID的一部分。
Doctrine如何改变价值?
修改
该字段属于实体PageNamespaceTranslation,由doctrine修改的字段为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导致这种效果吗?
答案 0 :(得分:0)
似乎Doctrine不支持共享列。在这种情况下它表现得很奇怪,并且因为重复列而无法插入。
我现在使用冗余的解决方案而不是使用共享列,毕竟它似乎是一个更好的解决方案,因为这些日期通常是读取的,几乎不会改变。