无法在 Laravel 上插入多个标签

Failed to insert multiple tags on Laravel

我想插入一个带有多个标签的 Post 记录,所以这是我在 Post@store 中的代码:

$post = Post::create(array(
            'title' => $request->title,
            'body' => $request->body,
            'user_id' => Auth::id(),
        ));

        if($post && $request->tags)
        {
            $tagNames = explode(',', $request->tags);
            $tagIds = [];
            foreach($tagNames as $tagName)
            {
                $tag = Tag::firstOrCreate(['name'=>$tagName]);
                if($tag)
                {
                    $tagIds[] = $tag->id;
                }
            }

            $post->tags()->attach($tagIds);
        }

但它给我一个错误 "Call to a member function attach() on null"。当我签入 mysql 时,标签已经在那里,但我在 post_tag 表格中找不到任何条目。这是我的 post 模型:

class Post extends Model
{
    protected $fillable = ['user_id','title','slug','body','tags','category_id','featured'];

    public function category()
    {
        return $this->belongsTo('App\Category');
    }

    public function tags()
    {
        $this->hasMany('App\Tag');
    }
}

您需要 return 在您的 Post 模型中调用 hasMany

public function tags()
{
    return $this->hasMany('App\Tag');
}

更新

您应该使用 belongsToMany 而不是 hasMany