Laravel syn c не работает после вызова обновления - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь синхронизировать c сводную таблицу, но я получаю столбец «article_id» не может быть нулевым. все работает нормально, кроме функции Update , когда я вызываю syn c.

Модель статьи:

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

Модель тега:

public function article()
{
    return $this->belongsToMany('App\Article', "tag_article", "tag_id");
}

Сводная таблица:

Schema::create('tag_article', function (Blueprint $table) {
        
        $table->bigInteger('tag_id')->unsigned()->index();

        $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');

        $table->bigInteger('article_id')->unsigned()->index();

        $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
});

Контроллер:

public function create(){

    $tags = Tag::pluck('name', 'id');

    return view('create', compact('tags'));
}

public function store(CreateArticleRequest $request){

    $article = article::create($request->all());

    $article->tags()->attach($request->input('tag_list'));

    return redirect('create');
}

public function edit(Article $Article){

    $tags = Tag::pluck('name', 'id');

    return view('edit', compact('article', 'tags'));

}

public function update(Article $article, CreateArticleRequest $request){

    $article->update($request->all());

    $article->tags()->sync($request->input('tag_list'));

    return redirect('create');

}

Идентификаторы тегов, которые я отправляю для синхронизации c:

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

Я получаю ошибку:

SQLSTATE[23000]: Integrity constraint violation:
1048 Column 'article_id' cannot be null (SQL: insert into `tag_article` (`article_id`, `tag_id`) values (?, 14))

PS: не могу позвонить прикрепить или отсоединить в метод обновления либо (та же ошибка)

Может кто объясните, что не так?

1 Ответ

0 голосов
/ 02 августа 2020

Благодаря @lagbox я исправил свою проблему

Я изменил свой маршрут с:

Route::patch('/update', 'ArticleController@update')->name('update');

Кому:

Route::patch('/update/{article}', 'ArticleController@update')->name('update');

и изменил свою форму :: open от:

{!! Form::model($article, ['method' => 'PATCH', 'route' => 'update']) !!}

Кому:

{!! Form::model($article, ['method' => 'PATCH', 'route' => ['update', $article->id]]) !!}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...