Мой контроллер:
/**
* @Route("/row/{slug}/{connect}/{field}/{productgroup}", name = "row", methods = {"POST"})
*/
public function row($slug, $connect, $field,$productgroup, Request $request) {
$EntityName = 'App\\Entity\\' . ucwords($slug);
$con = 'App\\Entity\\' . ucwords($connect);
$entity = $this->getDoctrine()->getRepository($EntityName)->findOneBy(['id' => $field]);
$entityManager = $this->getDoctrine()->getManager();
$argsId = $productgroup;
$args = $entityManager->getReference($connect , $argsId);
$entity->setProductgroup($args);
$entityManager->flush();
$response = new Response();
$response->send();
return $response;
}
Сообщение об ошибке:
Class 'Productgroup' does not exist




Я не могу сказать вам, почему возникает ошибка класса, но вы не можете передать объект сущности методу, который ожидает ArrayCollection, здесь:
/* args is not an ArrayCollection */
$args = $entityManager->getReference($connect , $argsId);
$entity->setProductgroup($args);
Возможно, вам следует использовать addProductgroup().
Если $argsId представляет собой массив идентификаторов, вы должны получить ссылку на каждый из них и добавить объекты-призраки в коллекцию ArrayCollection.
рабочее решение:
/**
* @Route("/row/{entity}/{relation}/{entity_id}/{relation_id}", name = "row", methods = {"POST"})
*/
public function row($entity, $relation, $entity_id, $relation_id, Request $request) {
$entity_name = 'App\\Entity\\' . ucwords($entity);
$relation_name = 'App\\Entity\\' . ucwords($relation);
$entityManager = $this->getDoctrine()->getManager();
$enity_reference = $entityManager->getReference($entity_name, $entity_id);
$relation_reference = $entityManager->getReference($relation_name, $relation_id);
$func = 'add'.$relation;
$enity_reference->$func($relation_reference);
$entityManager->persist($enity_reference);
$entityManager->persist($relation_reference);
$entityManager->flush();
$response = new Response();
$response->send();
return $response;
}
Я рад, что вы нашли решение, но без каких-либо объяснений или контекста этот ответ никому не поможет.
Спасибо. Да, "добавить" было правильно. Смотрите мое рабочее решение ниже