Laravel:如何为标记系统使用透视表

Laravel:如何为标记系统使用透视表,laravel,tags,Laravel,Tags,我想为帖子创建标签 例如,我创建了三个新标记,但在TaggablesTable中只提交了一行 标签表: id | name | -------------- 1 | first| 2 | two | 3 | three| 标记表: tag_id|taggable_id|taggable_type ------------------------------- 3 | 1 |post public function store(Re

我想为帖子创建标签

例如,我创建了三个新标记,但在TaggablesTable中只提交了一行

标签表:

  id  | name |
--------------
 1    | first|
 2    | two  |
 3    | three|
标记表:

tag_id|taggable_id|taggable_type
-------------------------------
 3    |      1    |post




public function store(Request $request)
{
    $data = $request->all();
    $post = Post::create($data);
    if ($post && $post instanceof Post) {
       $tags = $request->input('tags');
        foreach ($tags as  $tag){
                 $newTag =Tag::firstOrCreate(['name'=>$tag]);
                 $tags= $newTag->id;
        }
        $post->tags()->sync($tags);
        return redirect()->back();
    }
}

如何做到这一点?

每次循环运行时都会覆盖标记。Map似乎是解决问题的更简单方法

$data = $request->all();
$post = Post::create($data);

$tags = collect($request->input('tags'))->map(function (string $tag) {
    return Tag::firstOrCreate(['name'=>$tag])->id;
})->all();

$post->tags()->sync($tags);
return redirect()->back();

检查post是否是if语句中的post似乎是多余的。