我正在调度一个延迟作业,该作业应该在数据库中创建一些条目:
`$userId = Auth::user() ? Auth::user()->getAuthIdentifier() : null;
$job = new DelayedAddPeopleJob($event, $userId);
dispatch($job)->delay(DelayedAddPeopleJob::DELAY);`
15 分钟后,DelayedAddPeopleJob 被执行,如果条目不存在,我会在数据库中创建条目。
`AutoAddHistory::firstOrCreate([
AutoAddHistory::MATRIX_ID_COLUMN => $matrixId,
AutoAddHistory::ROLE_ID_COLUMN => $ppr->getRoleId(),
AutoAddHistory::PERSON_ID_COLUMN => $ppr->getPersonId(),
AutoAddHistory::CREATED_BY_COLUMN => $this->placedBy,
]);`
在此实例中,placedBy 是传递给 DelayedAddPeopleJob 的 userId。然而,当 15 分钟后条目出现在数据库中时,由于某种原因,CREATED_BY 在数据库中为 NULL。
我做错了什么吗?我试图找到解决方案或类似的问题,但找不到。尝试通过魔术方法而不是 const 访问它,但没有帮助。
作业不能包含用户会话数据。
因此,你的条件
$userId = Auth::user() ? Auth::user()->getAuthIdentifier() : null;
总是变为false并返回null,你必须以另一种方式调用userId。
您可以将用户ID存储在父记录表中,并在需要时从这里获取。
还要确保
CREATED_BY
列fillable在您的模型中定义。