首页 文章

TYPO3 extbase - ObjectStorage和1:n关系

提问于
浏览
2

我有一个Item对象,它与类别有1:n的关系 . 我的物品模型包含:

setCategories(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $categories)
getCategories()
addCategory(VENDX\Items\Domain\Model\Category $category)
removeCategory(VENDX\Items\Domain\Model\Category $category)

但我无法在项目对象中添加多个类别 . 我试过了:

$category = $this->objectManager->get('VENDX\Items\Domain\Model\Category');

$category->setCatName('Cat1');  //First category
$item->addCatgeory($category);

$category->setCatName('Cat2'); //Second category
$item->addCategory($category);

将$ item添加到我的$ itemrepository后,它只将最后一个类别“Cat2”保存到数据库中 . 我错过了什么?

还尝试过:

$categories = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\ObjectStorage');
$category = $this->objectManager->get('VENDX\Items\Domain\Model\Category');
$category->setCatName('Cat1');  //First category
$categories->attach($category);

$category->setCatName('Cat2');  //Second category
$categories->attach($category);

$item->setCategories($categories);

与上述代码相同的问题 . 它只保存最后(第二)类别 . 如何在项目对象中添加多个类别?

1 回答

  • 1

    我使用SAME类别对象时犯了致命错误 . 实际上我只是改变了它的CatName值 . 在ORM中,每个“值”都需要一个对象 . 意味着我们不能像上面那样使用相同的对象进行多个“对象分配” . 所以实现我的目的的正确方法是:

    $categories = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\ObjectStorage');
    
    $category1 = $this->objectManager->get('VENDX\Items\Domain\Model\Category'); //1st catobj
    $category1->setCatName('Cat1');  //First category
    $categories->attach($category1);
    
    $category2 = $this->objectManager->get('VENDX\Items\Domain\Model\Category'); //2nd catobj
    $category2->setCatName('Cat2');  //Second category
    $categories->attach($category2);
    
    $item->setCategories($categories);
    

    另一个“错误”是使用objectManager进行实体实例化 . 我被告知要通过“new”构建它们,而不是使用objectManager“扩展”扩展 . 所以我的最终解决方案是:

    $categories = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage;
    
    $category1 = new \VENDX\Items\Domain\Model\Category; //1st catobj
    $category1->setCatName('Cat1');  //First category
    $categories->attach($category1);
    
    $category2 = new \VENDX\Items\Domain\Model\Category; //2nd catobj
    $category2->setCatName('Cat2');  //Second category
    $categories->attach($category2);
    
    $item->setCategories($categories);
    

相关问题