Публикации - Laravel

База данных и модели - Связи моделей - belongsToMany - принадлежит многим

Примеры таблиц: категории - продукты, при этом, категория может содержать множество продуктов, и продукт может принадлежать разным категориям.

Для реализации такой связи необходимо:

1. Создать связующую таблицу, содержащую два внешних ключа. Имена полей должны соответствовать следущему формату:

<имя связываемой модели>_id

Пример связующей миграции category_product:

Schema::create('category_product', function (Blueprint $table) {
 $table->unsignedInteger("category_id")->comment("Связь с категорией");
 $table->unsignedInteger("product_id")->comment("Связь с продуктом");

 $table->foreign("category_id")
       ->references("id")->on("reviews")
       ->onDelete("cascade");
 $table->foreign("category_id")
       ->references("id")->on("courses")
       ->onDelete("cascade");
});

2. В первой связываемой модели объявить метод, имя которого совпадает с именем связываемой таблицы и возвращает объект связи с помощью метода belongsToMany.

public function products(){
 return $this->belongsToMany(Category::class);
}

3. Теперь в классах для добавления связи можно использовать метод attach(), который связывает текущую запись со связанными ключами.

    public function postReviewCourse(Request $request, Review $review){
        $review->courses()->attach($request->course_id);
    }

Либо метод sync, который связывает текущую запись с указанными в массиве ключами, все остальные ключи, не указанные в массиве - отвязываются.

$review->courses()->sync([$request->course_id]);

Либо syncWithoutDetaching, который делает тоже что sync, однако без отвязывания записей.

$review->courses()->syncWithoutDetaching($request->course_id);

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. Подключение CKEditor https://artisansweb.net/install-use-ckeditor-laravel/#comments
2. Регистрация и авторизация https://know-online.com/post/laravel-reg
3. Что нового в Laravel 8 https://sergeymukhin.com/blog/chto-novogo-v-laravel-80
4. Авторизация Sanctum <iframe width="560" height="315" src="https://www.youtube.com/embed/MT-GJQIY3EU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>