Как одной ячейке присвоить несколько связей?

Пример: Есть две таблицы: категории и товары. Категории: id, name. Товары: id, category_id, title, desc, price. Как одному товару добавить несколько категорий(связей): например category_id: 1, 3, 5


Ответы (1 шт):

Автор решения: Anton Mironov

Переделать структуру под 3 таблицы: categories, items, category_item. В категориях оставить id, name. В товарах id, title, desc, price. В третьей таблице category_id, item_id. Если вы используете laravel, как указано в тегах, можно воспользоваться такими миграциями:

Schema::create('categories', function (Blueprint $table) {
    $table->id();
    $table->string('name');
});
Schema::create('items', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->string('desc');
    $table->string('price');
    $table->timestamps();
});
Schema::create('category_item', function (Blueprint $table) {
    $table->foreignId('category_id')->constrained();
    $table->foreignId('item_id')->constrained();
});

И в моделях указать связи:

// Models\Category
public function items(){
    return $this->belongsToMany(Item::class);
}

// Models\Item
public function categories(){
    return $this->belongsToMany(Category::class);
}

После этого сможете в третьей таблице указывать Id товара и id нужной категории в отдельных записях и получать все категории, принадлежащие товару, а также все товары, принадлежащие категории.

→ Ссылка