我确信必须有一种非常简单的方法来执行此操作-每当创建资源的新实例时,我都想用经过身份验证的用户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控制器?
我将不胜感激!
答案 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。