У меня есть некоторые функции, которые изменяют каждый элемент в коллекции объекта:
foreach ($screen->getBlocks() as $block) {
$block->setSomeField();
}
После этого я пытаюсь сохранить объект в базе данных:
$this->em->persist($screen);
$this->em->flush();
Свойство Screen :: $ blocks имеет аннотации:
/**
* @ORM\OneToMany(targetEntity = "App\Entity\Block", mappedBy = "screen", cascade = {"remove", "persist"}, orphanRemoval=true)
* @ORM\OrderBy({"position": "ASC"})
* @Groups({"block"})
* @ApiSubresource
* @Assert\Valid
*
* @var Block[]|Collection
*/
private $blocks;
Перед сбросом я вижу, что объекты в коллекции изменены, но после - значения возвращаются обратно, кажется, что entityManager снова захватывает, если из базы данных. Единственное решение, которое сработало для меня, - это добавить $ this-> em-> clear (); перед сбросом, но я не могу понять логику ..




Можете ли вы попробовать переместить персист по циклу foreach следующим образом:
$this->em->persist($screen);
foreach ($screen->getBlocks() as $block) {
$block->setSomeField();
}
$this->em->flush();
попробуйте следующий метод и посмотрите по-другому
dump($screen->getBlocks());
foreach ($screen->getBlocks() as $block) {
$block->setSomeField();
dump(block);
}
dump($screen->getBlocks());