Php TYPO3 extbase-对象存储和1:n关系

Php TYPO3 extbase-对象存储和1:n关系,php,typo3,extbase,Php,Typo3,Extbase,我有一个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) 但我无法向itemob

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

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

使用同一个类别对象时,我犯了一个致命错误。事实上,我刚刚更改了它的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);