我在列表和类别之间建立了多对多的关系。我正在尝试使用$ listing-> setCategories($ categories)设置商家信息的类别。我没有得到错误,但关系没有保存到数据库。
我将在下面提供所有相关代码。
映射文件
列出映射
<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();
感谢您的帮助。
答案 0 :(得分: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();
}