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

What is the best way to add the authenticated user to a related model?

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

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

目前,我有以下的工作,但它运行一个额外的查询(即 1. 创建 post。2. 用 author_id 更新 post)。

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 的所有其他属性的想法。

我考虑的另一个选择是在 Post 创建事件上创建一个事件侦听器。我不知道这是否会减少额外查询的需要。

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

也许你可以在相关型号上考虑一下:

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

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

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

    return new PostResource($post);
}

希望对您有所帮助。