1

我确信必须有一种非常简单的方法来做到这一点——每当创建资源的新实例时,我想用经过身份验证的用户 id 填充资源上的 user_id 字段。

在我的资源模型的 store() 方法中,我有:

public function store(Request $request)
{
    $input = $request->all();
    $resource = Resource::create($input);
    $resource->user_id = Auth::user()->id;
    return $resource;

    return 'Resource added.';
}

这通过发布 API 路由起作用,但是每当我通过 Nova 仪表板添加新资源实例时,它都不会添加 Auth 用户 ID。我猜这是因为 Nova 没有使用我设置的资源控制器?

我会很感激建议!

4

4 回答 4

3

假设您有关系方法User::resources(),以下应该有效:

return $request->user()->resources()->create($request->all());

您拥有它的方式不起作用,因为您在将用户与其关联后没有保存资源。

于 2018-09-18T18:37:17.207 回答
0

我还没有使用过 Nova,但因为它也是 laravel 并且很可能是 Eloquent ORM,所以我可以告诉以下内容。

在这两行中,您已经设置了user_id但没有保留更改:

$resource->user_id = Auth::user()->id;
return $resource;

您应该添加此行以保存您所做的更改:

$resource->save();

作为替代方案,您可以将值添加到您的$input数组中:

$input = $request->all();
$input["user_id"] = Auth::user()->id;
$resource = Resource::create($input);
于 2018-09-18T18:38:17.177 回答
0

我刚刚创建了一个 ResourceObserver。使用创建的方法保存 Auth()->user->id。

将 ResourceObserver 注册到 AppServiceProvider 和 NovaServiceProvider。

https://laravel.com/docs/5.7/eloquent#observers

https://nova.laravel.com/docs/1.0/resources/#resource-events

于 2018-09-18T18:53:04.590 回答
0

在模型类中,添加如下函数:

public function save(array $options = array())
{
    $this->user_id = auth()->id();
    parent::save($options);
}

如果您倾向于在任何其他情况下使用保存,请小心,以免覆盖现有的 user_id。

于 2019-10-12T20:41:30.163 回答