Доктрина с всегда живыми данными из базы данных / очистка разрушает все / Ratchet chat

Я занимаюсь разработкой чата с использованием Ratchet PHP WebSockets.
Проблема в том, что я использую Doctrine для слоя базы данных — и скрипт не перезагружается все время, как для обычных веб-запросов.

Поэтому я решил использовать $entityManager->clear() на каждом подключении. (OnMessage)
Это работает все время, за исключением тех случаев, когда я хочу сохранить новые объекты с обычно новыми пользователями.

Случай использования:

onMessage:

/** @var \Doctrine\Bundle\DoctrineBundle\Registry $doctrine */
$doctrine = $this->container->get('doctrine');
$doctrine->getManager()->clear();

$user = $this->container->get(UserRepository::class)->find(1);
// checks for is enabled etc. works because user is always fresh from the database so
// if I disable him while the script is running it will be detected

Сохранение сущности с загрузкой данных только что из базы данных.

$user = $this->container->get(UserRepository::class)->find($subscriber->Session->get('user_id'));
if ($user) {
/** @var \Doctrine\Bundle\DoctrineBundle\Registry $doctrine */
$doctrine = $this->container->get('doctrine');
$doctrine->getManager()->refresh($user);

echo 'BEFORE ERROR' . PHP_EOL;
$chatMessageStatus = new ChatMessageStatus();
$chatMessageStatus->setUser($user);
$chatMessageStatus->setChatMessage($message);
$this->entityManager->persist($chatMessageStatus);
echo 'AFTER ERROR' . PHP_EOL;
}

Ошибка:

A new entity was found through the relationship 'App\Entity\ChatMessageStatus#user' that was not configured to cascade persist operations for entity: patrick. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).

Я использую Symfony4 с Doctrine ORM 2.5.

Заранее спасибо за любые идеи.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector