Я использую Symfony 4 с мессенджером, и я использую воркера, который потребляет мои сообщения как длительный процесс.
У меня ошибка с доктриной, если я удалю свой пост и создаю заново новый и отправляю свое сообщение. $ post имеют старые данные, а не новые.
Я много чего перепробовал, но ничего не работает, работает, когда я перезапускаю свой рабочий.
class ChannelMessageHandler implements MessageHandlerInterface
{
private $channel;
private $bus;
public function __construct(ChannelService $channel, MessageBusInterface $commandBus)
{
$this->channel = $channel;
$this->bus = $commandBus;
}
public function __invoke(ChannelMessage $channelMessage)
{
$error = $this->channel->handleChannel($channelMessage->getUser(), $channelMessage->getService());
if ($error) {
throw new Exception($error[0]);
}
$this->bus->dispatch(new FeedMessage($channelMessage->getUser(), $channelMessage->getService()));
}
}
}
Мой MessageHandler вызывает службу:
class ChannelService implements ContainerAwareInterface
{
use ContainerTrait;
protected $em;
protected $logger;
public function __construct(EntityManagerInterface $entityManager, LoggerInterface $logger)
{
$this->em = $entityManager;
$this->logger = $logger;
}
public function handleChannel($userId, $serviceName)
{
$user = $this->em->getRepository('App:User\Authentication\User')->findOneById($userId);
$post = $user->getPost();
return $this->getUserAnalyticBy($post, $serviceName);
}
большое спасибо
$ this-> is-> clear () в начале тоже работает.
вам нужно обновить или перезагрузить его полностью да. Если вы этого не сделаете, Doctrinne получит объект из своего кеша.
Это поведение уже исправлено в Symfony 4.4, см. PR github.com/symfony/symfony/pull/31334/files




похоже, что это работает, если сделать: $ this-> em-> refresh ($ user); но это хорошая практика?