Это мой первый вопрос здесь, на Stackoverflow.com, и прежде чем я напишу много.Сначала функция контроллера:
/**
* @Rest\Patch("/identifiers/v2/{id}")
*
* @ParamConverter("identifier")
* @ParamConverter("identifierPatch", converter="fos_rest.request_body")
*/
public function patchAction(Identifier $identifier, Identifier $identifierPatch)
{
$identifier->setLandingPage($identifierPatch->getLandingPage());
$identifier->setIdentifier($identifierPatch->getIdentifier());
$identifier->setIsUsed($identifierPatch->getIsUsed());
$this->entityManager->flush();
/**
* Just for debugging...
*/
$view = $this->view([
'identifier' => $identifier,
'identifierPatch' => $identifierPatch
]);
return $this->handleView($view);
}
Когда я пытаюсь ОБНОВИТЬ существующую сущность таким образом, я получаю ORMInvalidArgumentException с сообщением " Новая связь была найдена через связь (...)"
Когда я устанавливаю cascade={"persist"}
для связанной сущности:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\LandingPage", inversedBy="identifiers")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotNull()
* @Serializer\Type("App\Entity\LandingPage")
*/
private $landing_page;
... связанная сущность будет вставлена как новая сущность, и это не то, чтоЯ ищу.
Я мог бы использовать $this->entityManager->merge($identifier)
, но это не то, что я ищу, а потому, что в будущем мне нужно будет выполнить некоторые ручные проверки и я хотел бы вернуть объект в качестве ответа (связанный объект будет нулевым, если он не обновлен), и $this->entityManager->merge()
будет устаревшим в Доктрине 3.
Вопрос: Есть ли способ обновить данный объект десериализованным объектом?
Привет, Дэнни Эндерт
РЕДАКТИРОВАТЬ (1): Ну, я думаю, я нашел решение относительно этой "проблемы".
services.yaml
jms_serializer.object_constructor:
alias: jms_serializer.doctrine_object_constructor
public: false
Теперь я не получаю эксception и связанный объект не будут вставлены как новый объект.