将经过身份验证的用户添加到相关模型的最佳方法是什么?

时间:2019-12-11 11:54:14

标签: laravel eloquent laravel-events

将经过身份验证的用户添加到相关模型的最佳方法是什么?

如果我想在创建新帖子时在帖子模型上将经过身份验证的用户添加为作者,那么最好的方法是什么?

目前,我可以执行以下操作,但是会运行一个额外的查询(即1.创建帖子。2.使用author_id更新帖子)。

public function store(Request $request)
{
  $post = Post::create($request->all());
  $post→author()->associate($request->user());
  $post→save();

  return new PostResource($post);

} 

必须有更好的方法来做到这一点。我正在考虑只是手动添加所有属性,并使用$post-author_id = $request→user()→id,然后调用$post-save()。但是,我不喜欢必须手动写出帖子的所有其他属性的想法。

我在想的另一个选择是通过在Post created事件上创建一个事件侦听器。我不知道这是否会减少对额外查询的需求。

最简单的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

也许您可以在相关模型上考虑这一点:

/**
     * Save auth user on create
     */
    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            $userID = auth()->id();
            $model->author_id = $userID;
        });
    }

答案 1 :(得分:1)

代替使用create方法,您可以简单地创建一个PostResource的新实例,并用author_id填充它。因此它将是捆绑查询。

public function store(Request $request) {
    $post = new Post($request->all());
    $post->author_id = Auth::user()->id;
    $post->save();

    return new PostResource($post);
}

希望对您有帮助。