0

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

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

目前,我有以下工作,但它运行一个额外的查询(即 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 创建事件上创建一个事件侦听器。我不知道这是否会减少对额外查询的需求。

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

4

2 回答 2

1

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

/**
     * Save auth user on create
     */
    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            $userID = auth()->id();
            $model->author_id = $userID;
        });
    }
于 2019-12-11T12:23:25.750 回答
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);
}

我希望它有所帮助。

于 2019-12-11T12:25:13.147 回答