TYPO3 extbase - ObjectStorage 和 1:n 关系
TYPO3 extbase - ObjectStorage and 1:n relation
我有一个 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);
上述代码存在同样的问题。它只保存最后一个(第二个)类别。如何向我的项目对象添加多个类别?
好吧,我在使用 SAME 类别对象时犯了一个致命错误。事实上,我只是更改了它的 CatName 值。在 ORM 中,每个 "value" 我们需要一个对象。意味着我们不能像上面那样对多个 "object-allocations" 使用同一个对象。所以实现我的目的的正确方法是:
$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);
另一个 "mistake" 正在使用 objectManager 进行实体实例化。我被告知通过 "new" 而不是 "overheading" 对象管理器的扩展来构造它们。
所以我的最终解决方案是:
$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);
我有一个 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);
上述代码存在同样的问题。它只保存最后一个(第二个)类别。如何向我的项目对象添加多个类别?
好吧,我在使用 SAME 类别对象时犯了一个致命错误。事实上,我只是更改了它的 CatName 值。在 ORM 中,每个 "value" 我们需要一个对象。意味着我们不能像上面那样对多个 "object-allocations" 使用同一个对象。所以实现我的目的的正确方法是:
$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);
另一个 "mistake" 正在使用 objectManager 进行实体实例化。我被告知通过 "new" 而不是 "overheading" 对象管理器的扩展来构造它们。 所以我的最终解决方案是:
$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);