TYPO3 extbase — ObjectStorage и отношение 1: n

У меня есть объект 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);

та же проблема с приведенным выше кодом. Это просто сохраняет последнюю (вторую) категорию. Как я могу добавить несколько категорий для моего предмета?

2

Решение

Ну, я сделал фатальную ошибку при использовании одного и того же объекта категории. На самом деле я просто изменил его значение 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]