Laravel,在null上调用成员函数sync()

时间:2017-09-02 15:47:57

标签: laravel eloquent fatal-error laravel-eloquent

我的laravel项目中有一个FatalThrowableError - 在null上调用成员函数sync()。 Debuger显示mi,即这行代码

Post::findOrFail($post_id)->tags()->sync([1, 2, 3], false);

此行的完整方法如下:

public function store(Request $request)
{
      // validate a post data
    $this->validate($request, [
            'title' => 'required|min:3|max:240',
            'body' => 'required|min:50',
            'category' => 'required|integer',
        ]);

    // store post in the database
    $post_id = Post::Create([
        'title' => $request->title,
        'body' => $request->body,
    ])->id;

    Post::findOrFail($post_id)->tags()->sync([1, 2, 3], false);

    // rediect to posts.show pages
    return Redirect::route('posts.show', $post_id);
}

My Post模型看起来像

class Post extends Model
{
    protected $fillable = [ ... ];

    public function category() {...}

    public function tags()
    {
       $this->belongsToMany('App\Tag', 'post_tag', 'post_id', 'tag_id');
    }
}

我的Tag模型看起来像

class Tag extends Model
{
    protected $fillable = [ ... ];

    public function posts()
    {
        return $this->belongsToMany('App\Post', 'post_tag', 'tag_id', 'post_id');
    }
}

谢谢你的anser!

2 个答案:

答案 0 :(得分:0)

试试这个

// store post in the database
$post = new Post([
    'title' => $request->title,
    'body' => $request->body,
]);

$post->save();

$post->tags()->sync([1, 2, 3], false);

答案 1 :(得分:0)

该错误表明您在空对象上调用sync(),这意味着您的tags()方法的结果为null

如果你看一下tags()方法,就会发现忘了return关系,因此它正在返回null。添加return关键字,您应该做得很好。

public function tags()
{
    return $this->belongsToMany('App\Tag', 'post_tag', 'post_id', 'tag_id');
}