builder :: sync не существует ошибки со многими ко многим в Laravel - PullRequest
0 голосов
/ 24 апреля 2018

Подобные проблемы к этому вопросу здесь .

И я получаю следующее:

Метод 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');
      }
    }

Post Controller

    <?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);
      }

A dd($request->tags) возвращает

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

Какие правильные значения из формы ввода.

Если я удаляю строку $post->tags()->sync($request->tags, false);, она корректно записывает в БД, а если нет, но в любом случае запускаю ее, то корректно сохраняет таблицу posts, но не соответствующие значения в сводной таблице. .

1 Ответ

0 голосов
/ 24 апреля 2018

Изменить это:

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

К этому:

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