【问题标题】:Doctrine2 Zend many-to-many relationship issueDoctrine2 Zend 多对多关系问题
【发布时间】:2012-08-09 13:06:27
【问题描述】:

我在列表和类别之间建立了多对多的关系。我正在尝试使用 $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"/>

我在模型文件中有所有相关的变量和获取/设置函数。

试图在控制器中保存关系。

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

感谢您的帮助。

【问题讨论】:

    标签: zend-framework doctrine-orm many-to-many database-relations


    【解决方案1】:

    我也遇到过类似的错误。我不知道是什么原因造成的,但我必须在保存新关系之前保存一个空值数组:

    例如:

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

    【讨论】:

    • 谢谢。我已经尝试过了,但我一定在某个地方犯了错误。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多