-1

목록과 카테고리간에 다 대다 관계를 설정했습니다. 나는 $ listing-> setCategories ($ categories)를 사용하여 목록의 범주를 설정하려고합니다. 오류가 발생하지 않지만 관계가 db에 저장되지 않습니다.Doctrine2 젠드 다 대다 관계 문제

아래 관련 코드를 모두 포함합니다.

매핑 파일

목록 매핑

<many-to-many field="categories" target-entity="Default_Model_Category" mapped-by="listings" > 
    <cascade> 
     <cascade-persist/> 
    </cascade> 
</many-to-many> 

Categrory 매핑

<many-to-many field="listings" target-entity="Default_Model_Listing" inversed-by="categories"/> 

나는 모든 관련 변수를 가지고 모델 파일에 get/set 함수.

컨트롤러에 관계를 저장하려고합니다.

$catModel = $this->em->getRepository('Default_Model_Category'); 
    $catArray = array(); 
    foreach($categories as $single) { 
     $catArray[] = $catModel->findOneById($single); 
    } 
    $listing->setCategories($catArray); 
    $this->em->flush(); 

감사합니다.

답변

0

비슷한 버그가 있습니다. 나는 그것을 일으키는 원인이 있었는지 모르겠지만, 새로운 관계를 저장하기 전에 값의 빈 배열을 저장했다 :

예 :

$listing->setCategories(array()); //clear current relationships 
$this->em->flush(); 
$listing->setCategories($catArray); // save new relationships 
$this->em->flush(); 
[편집]

그것은 당신처럼 보인다

상위 목록을 하위 목록에 지정하고 있습니다. 간단히 말하면, Doctrine은 부모가 옳고 그 아이가 틀렸다고 말하면서 아이의 리스팅은 새로운 부모를 지정할 수 없습니다. 코드를 역전 시키시겠습니까?

$catModel = $this->em->getRepository('Default_Model_Category'); 
foreach($categories as $single) { 
    $cat = $catModel->findOneById($single); 
    $listingArray = $cat->getListings(); 
    $listingArray[] = $listing; 
    $cat->setListings($listingArray); 
    $this->em->flush(); 
} 
+0

감사합니다. 나는 이것을 이미 시도했지만 어딘가에서 실수를 저질렀을 것입니다. :) – jjmu15