2013-08-28 5 views
1

코드를 실행하면 Doctrine은 값을 변경하지 않았더라도 데이터베이스의 값을 0으로 변경합니다. 이 필드에는 Setter-Method조차 없습니다.Doctrine이 아무 이유없이 업데이트합니다.

필드는 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> 

UPDATE

내가 문제를 현지화 한 생각 : 나는 개체도 필드 language_id라고 한 InformationObjectAliasPageTranslation라고합니다. 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 열을 한 번만 사용하므로 문제가 없습니다.

<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 수 :

의 orginal 한 형태로 InformationObjectAliasPageTranslation의 매핑

?

+1

일부 코드 (예 : 주석 등)를 표시하십시오. – Tuxes3

+0

Doctrine 2는 부적절합니다. 리플렉션을 사용하여 데이터베이스에 직접 /에서 속성을 가져 오거나 설정합니다. 또한 D2는 생성자를 호출하지 않습니다. @ Tuxes3처럼 우리에게 약간의 코드를 보여줍니다. – Cerad

+0

@ Tuxes3 어때? –

답변

0

Doctrine은 열 공유를 지원하지 않는 것 같습니다. 이 경우 이상하게 작동하고 열이 반복되기 때문에 삽입 할 수 없습니다.

이제 공유 열을 사용하는 대신 중복성이있는 솔루션을 사용합니다.이 날짜는 종종 읽히고 거의 변경되지 않으므로 결국 더 나은 솔루션 인 것으로 보입니다.

관련 문제