Очистка Doctrine не обновляет связанный объект коллекции - PullRequest
0 голосов
/ 31 мая 2018

У меня есть некоторые функции, которые изменяют каждый элемент в коллекции сущностей:

foreach ($screen->getBlocks() as $block) {
        $block->setSomeField();
}

После этого я пытаюсь сохранить объект в базе данных:

$this->em->persist($screen);
$this->em->flush();

The 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 (); до сброса, но я не могу понять логику ..

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

попробуйте следующий метод и посмотрите иначе

dump($screen->getBlocks());
foreach ($screen->getBlocks() as $block) {
    $block->setSomeField();
    dump(block);
}
dump($screen->getBlocks());    
0 голосов
/ 01 июня 2018

Можете ли вы попробовать переместить персистент по циклу foreach следующим образом:

$this->em->persist($screen);
foreach ($screen->getBlocks() as $block) {
    $block->setSomeField();
}
$this->em->flush();
...