У меня есть объект 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);
та же проблема с приведенным выше кодом. Это просто сохраняет последнюю (вторую) категорию. Как я могу добавить несколько категорий для моего предмета?
Ну, я сделал фатальную ошибку при использовании одного и того же объекта категории. На самом деле я просто изменил его значение 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);
Других решений пока нет …