我知道很多人问这种类型的问题,但我相信我是不同的,因为我只encouter错误时,试图运行的消息cnc。
这只是一个个人使用的项目,试图实现strava高级功能我自己(我让它工作,但我只是想更好地处理一切)。我是新的symfony,所以我希望我提出的问题和问题明确的人给给予我一些提示。
在我的控制器中,我调用函数来开始从strava API加载活动,然后进行一些计算来持久化新的活动并刷新它们。
我只遇到这个错误时,运行的消息c.如果im同步运行它的工作完全正常.我希望能够运行它c,因为这使得用户体验更好的方式,如果我可以做其他事情,而功能在后台运行.
在我的控制器中,我像这样调用开始加载:
$user = $this->getUser();
$messageBus->dispatch(new StartLoadingMessage($user));
字符串
StartLoadingMessage类只是标准消息类
StartLoadingMessageLog类是这样的:
class StartLoadingMessageHandler implements MessageHandlerInterface
{
public function __construct(private StravaRequests $startLoading)
{
$this->startLoading = $startLoading;
}
public function __invoke(StartLoadingMessage $message)
{
// Run the background task here
$user = $message->getUser();
$this->startLoading->startLoading($user);
}
}
型
然后在实际的startloading函数中,我进行了一些API调用(没有错误)和一些计算,然后我尝试将新创建的Activity添加到数据库中,如下所示:
$newActivity = new Activity();
$newActivity->setUser($user);
$newActivity->setStravaId($activity['id']);
$newActivity->setType($activity['type']);
$newActivity->setRecordData($peaks);
$this->em->persist($newActivity);
$this->em->flush();
型
EDIT在此之后,我也更新用户如下:
if (count($activities) > 0) {
$latestEpochBeforeDate =
strtotime($activities[count($activities) - 1]['start_date']);
$user->setLatestLoadedEpochDate($latestEpochBeforeDate);
$this->em->flush();
}
型
我不知道这是否是正确的方式即时通讯你需要创建一个新的实体(活动在我的情况下)和更新其他(用户)
在Activity实体中,我确保添加了cascade persist行:
#[ORM\ManyToOne(inversedBy: 'activities', cascade:['persist'])]
#[ORM\JoinColumn(nullable: false)]
private ?User $user = null;
型
我试图在startloading函数中显式地调用用户实体上的automityManager #persist(),但这也不起作用。
1条答案
按热度按时间pengsaosao1#
我猜问题来自于你的User实体,当它在Doctrine中运行时,它当前与Doctrine作用域分离。纠正它的方法是使用下面的代码,如果你的Doctrine版本接受它:
字符串
或者简单地使用UserRepository和用户ID查询User,并替换实际的$user变量。