Laravel 如何在创建资源时用auth user填充用户id字段?

Laravel 如何在创建资源时用auth user填充用户id字段?,laravel,api,authentication,laravel-nova,Laravel,Api,Authentication,Laravel Nova,我相信一定有一种非常简单的方法可以做到这一点——每当创建资源的新实例时,我都希望用经过身份验证的用户id填充资源上的user_id字段 在我的资源模型的store()方法中,我有: 公共函数存储(请求$Request) { $input=$request->all(); $resource=resource::create($input); $resource->user\u id=Auth::user()->id; 返回$resource; 返回“已添加资源”; } 这是通过post API

我相信一定有一种非常简单的方法可以做到这一点——每当创建资源的新实例时,我都希望用经过身份验证的用户id填充资源上的user_id字段

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

公共函数存储(请求$Request)
{
$input=$request->all();
$resource=resource::create($input);
$resource->user\u id=Auth::user()->id;
返回$resource;
返回“已添加资源”;
}
这是通过post API路由实现的,但是每当我通过Nova dashboard添加新的资源实例时,它都不会添加Auth用户id。我猜这是因为Nova没有使用我设置的资源控制器


我将感谢您的建议

假设您拥有关系方法
User::resources()
以下操作应该可以:

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

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

我还没有使用Nova,但由于它也是laravel,而且很可能是雄辩的ORM,我可以告诉您以下几点

在这两行中,您已经设置了
user\u 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);

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

已将ResourceObserver注册到AppServiceProvider和NovaServiceProvider


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

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

如果您在任何其他情况下倾向于使用save,请小心,以免覆盖现有用户id。

也许在仪表板的某个地方,您可以告诉nova使用此控制器。这并没有解决问题,但我认为您建议的另一种方法是以更简洁的方式书写我最初的内容,谢谢。无关:在编辑队列中,我遇到了一个问题,你在分类中投票了。你在那里做了错误的选择。请:仔细研究分类帮助,避免将不属于那里的项目放入编辑队列。请理解,您的投票有后果!我具体是说。这一要求过于宽泛,因此不能就此了结。除了OP之外,没有其他人能够通过编辑来“修复”问题,因此这里的编辑是绝对错误的。如果你有适当的关系,这是正确的方式。如果您确定执行时有一个登录的用户,您还可以直接执行
Auth::user()->resources()->create($request->all())