-1

私はリストとカテゴリーの間に多対多の関係を築いています。$ Listing-> setCategories($ category)を使用して、リストのカテゴリを設定しようとしています。エラーは発生しませんが、関係はデータベースに保存されません。

以下に関連するすべてのコードを含めます。

マッピングファイル

リストマッピング

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

カテゴリマッピング

 <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();

ご協力いただきありがとうございます。

4

1 に答える 1

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();
}
于 2012-08-14T14:35:23.440 に答える