创建资源时如何用auth用户填充用户ID字段?

时间:2018-09-18 18:22:59

标签: laravel api authentication laravel-nova

我确信必须有一种非常简单的方法来执行此操作-每当创建资源的新实例时,我都想用经过身份验证的用户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不会使用我已经设定的那个Resource控制器?

我将不胜感激!

4 个答案:

答案 0 :(得分:3)

假设您使用的是关联方法User::resources(),则应该可以进行以下操作:

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

拥有资源的方式行不通,因为您没有在将用户与资源相关联之后保存资源。

答案 1 :(得分:0)

我还没有使用过Nova,但是由于它也是laravel和很有可能是雄辩的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);

答案 2 :(得分: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

答案 3 :(得分:0)

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

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

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