首页 文章

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

提问于
浏览
0

我确信必须有一个非常简单的方法 - 每当创建新的资源实例时,我想用经过身份验证的用户的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没有使用我已经列出的资源控制器?

我很感激建议!

3 回答

  • 0

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

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

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

  • 3

    我还没有使用过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);
    
  • 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

相关问题