【问题标题】:TYPO3 extbase - ObjectStorage and 1:n relationTYPO3 extbase - ObjectStorage 和 1:n 关系
【发布时间】:2015-11-15 01:37:24
【问题描述】:

我有一个 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)

但我无法向 itemobject 添加多个类别。 我试过了:

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

上面的代码也有同样的问题。它只保存最后一个(第二个)类别。如何向我的项目对象添加多个类别?

【问题讨论】:

    标签: php typo3 extbase


    【解决方案1】:

    我在使用相同的类别对象时犯了一个致命错误。事实上,我只是改变了它的 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 进行实体实例化。我被告知通过“新”而不是使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多