Почему Extbase PersistenceManager считает, что мой объект новый? - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу обновить некоторые объекты Extbase в задаче планировщика. Я звоню в хранилище, чтобы получить все объекты. Затем я устанавливаю одно свойство этого объекта и пытаюсь обновить его. Это бросает мне это исключение

Объект типа "FFPI \ FfpiNodeUpdates \ Domain \ Model \ Node", данный для обновления, должен быть уже сохранен, но является новым.

производитель / typo3 / К / typo3 / sysext / Extbase / Классы / Постоянство / Generic / PersistenceManager.php: 237

след:
0: TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ PersistenceManager
1: TYPO3 \ CMS \ Extbase \ Persistence \ Repository
2: FFPI \ FfpiNodeUpdates \ Task \ NotificationTask
3: FFPI \ FfpiNodeUpdates \ Task \ NotificationTask
4: TYPO3 \ CMS \ Scheduler \ Scheduler
5: TYPO3 \ CMS \ Scheduler \ Controller \ SchedulerModuleController
...

мой код можно сократить до этого

$nodes = $this->nodeRepository->findAll()->toArray();
foreach ($nodes as $node){
    $this->myUpdateFunction($node);
}
private function myUpdateFunction(Node $node)
{
    $node->setOnline(true);
    $this->nodeRepository->update($node); // <- Gives the exception
}

Он работал нормально в 7.6, но доза больше не работает в 8.7

Я пытался получить хранилище с помощью
* Инъекция зависимости (доза не работает вообще)
* GeneralUtility :: makeInstance () (я получаю репозиторий, но есть исключение)
* objectManager-> get () (я получаю репозиторий, но есть исключение)

Обновление: У меня эта проблема тоже в версии 9.5

1 Ответ

0 голосов
/ 27 апреля 2019

Прежде всего вы должны использовать функцию makeInstance () только для получения Менеджера объектов, затем вы должны использовать его вместо makeInstance () для работы с вашими объектами.

Для вашей основной проблемы яЯ не уверен, что это помогает, но вам, возможно, придется использовать PersistanceManger-> persistAll ();В его коде есть комментарий, который гласит: «Передает новые объекты и изменения в объекты в текущем сеансе персистентности в серверную часть»

Надеюсь, это поможет ^^

...