@kupurim

Как реализовать нормальную вставку в таблицу со связями в laravel?

Здравствуйте.
Есть таблица с записями (post) к ней связывается таблица post_support для отношения к таблице support.
Идею реализации спрашивал тут.
Картинка связей
5bf3ff8f2e108497548276.png

Сделал миграцию для post_support:
Код миграции
Schema::create('post_support', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('post_id')->unsigned();
            $table->integer('support_id');

            $table->foreign('post_id')->references('id')->on('post');
 });


Далее в модели Post прописал связь.
Код
public function supports() {
        return $this->hasMany('App\PostSupport');
}


Все как-бы хорошо пока идет, вывод данных происходит как нужно, но вот при сохранении выдает ошибку
"MassAssignmentException in Model.php line 444: support_id"
Код сохранения
$post = App\Post::find($page_id);
foreach ($request->input('support_id') as $id) {
    $post->supports()->save(
        new App\PostSupport(['support_id' => $id])
    ); 
}


Можно конечно вставить напрямую через DB::table('post_support')->insert([]) но интересно в чем проблема.
Вопрос 2.
При обновлении записи я могу изменить только поля с supports и когда сохраняю, выводится ошибка что запись не обновилась. Код:
if( DB::table('post')->where('id', '=', $page_id)->update($data) ) {
    echo "ok";
}

Тут и так понятно почему не выводится сообщение, я вставляю записи в post_support выше, но предварительно все удаляю - DB::table('post_support')->where('post_id', '=', $page_id)->delete();
Как можно сделать по правильному?
Спасибо за помощь!
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы