【问题标题】:builder::sync does not exist error with many-to-many in Laravelbuilder::sync 在 Laravel 中不存在多对多错误
【发布时间】:2018-10-04 20:08:26
【问题描述】:

与本期here类似的问题。

我得到以下信息:

方法 Illuminate\Database\Query\Builder::sync 不存在。

但是我的代码已经有了给定的解决方案...

标签模型:

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Tag extends Model
    {
        public function posts()
        {
            return $this->belongsToMany('App\Post',  'post_tag');
        }
    }

后模型:

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Post extends Model
    {
      public function user(){
        return $this->belongsTo('App\User');
      }

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

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

后控制器

    <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Session;
    use Carbon\Carbon;

    use App\Category;
    use App\Post;
    use App\Tag;
    use App\User;


    class PostController extends Controller
    {
      public function __construct() { 
        $this->middleware('auth');
      }
...
      public function store(Request $request)
      {

        // Validate the data
        $this->validate($request, [
          'title'       => 'required|max:255',
          'category' => 'required|integer',
          'body'        => 'required'
        ]);

        $post = new Post;
        $post->title = $request->input('title');
        $post->body = $request->input('body');
        $post->slug = uniqid();
        $post->category_id = $request->category;
        $post->user_id = auth()->user()->id;
        $post->save();

        $post->slug = str_slug($request->input('title').' '.$post->id, '-');
        $post->save();

        $post->tags()->sync($request->tags, false);


        Session::flash('success', 'The blog post was successfully saved!');

        return redirect()->route('posts.show', $post->id);
      }

dd($request-&gt;tags) 返回

array:2 [▼
   0 => "1"
   1 => "2"
 ]

表单输入中哪些是正确的值。

如果我删除$post-&gt;tags()-&gt;sync($request-&gt;tags, false); 行,它会正确写入数据库,如果我不这样做,但仍然运行它,它将正确保存到posts 表,但不会将相关值保存到数据透视表.

【问题讨论】:

  • -&gt;sync() 关系上没有 -&gt;sync() 方法。从关系的另一方来看,您需要改为belongsToMany。然后它应该可以工作
  • 就是这样!我一遍又一遍地检查控制器,问题出在模型上!谢谢。如果你想回答这个问题,我会标记为正确的。

标签: php laravel eloquent many-to-many laravel-5.6


【解决方案1】:

改变这个:

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

到这里:

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

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 2019-11-17
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2021-11-21
    • 2021-08-27
    相关资源
    最近更新 更多