Применение Laravel принадлежит одному продукту для одной или какой-либо категории

в моей базе данных у меня есть product_category и products , в которых один product может принадлежать одной или какой-либо категории в таблице product_category , теперь мой вопрос: когда пользователь отправляет продукт с одной или какой-либо категорией, как я могу сохранить это в базе данных, например, для одной категории есть один или какой-то продукт?

в виду, у меня есть несколько вариантов:

 {{ Form::select('categories[]', $productCategories, null, array('class' => 'multiselect-success multiselect_selected','multiple'=>'multiple')) }} 

модель products :

 class Products extends Model { protected $table = 'products'; protected $guarded = ['id']; protected $casts = [ 'images' => 'array' ]; public function productCategories() { return $this->belongsTo(ProductCategories::class); } } 

productCategories модель:

 class ProductCategories extends Model { protected $table = 'product_categories'; protected $guarded =['id']; protected $casts=[ 'images'=>'array' ]; public function products() { return $this->hasMany(Products::class); } } 

и store функцию в controller :

 public function store(RequestProducts $request) { try { $data = Products::create([ 'name' => $request->name, 'amount' => $request->amount, 'product_code' => $request->product_code, 'weight' => $request->weight /* MY PROBLEM IS HERE */ 'category_id' => $request->categories ]); } catch (Exception $ex) { ... } return redirect(route('manageProductCategories.index')); } 

в categories просмотра html есть массив и как я могу это реализовать?

ОБНОВИТЬ

после обновления кода с помощью createMany я получаю эту ошибку:

 General error: 1364 Field 'category_id' doesn't have a default value (SQL: insert into `products` (`name`, `lang`, `amount`, `product_code`, `weight`, `images`, `updated_at`, `created_at`) values (eqweqwe, fa, 45,000, asd, asdasd, '', 2017-12-09 04:45:44, 2017-12-09 04:45:44)) 

файлы миграции:

 public function up() { Schema::create('product_categories', function (Blueprint $table) { $table->increments('id'); $table->string('category_name'); $table->string('lang', 2); $table->text('images'); $table->timestamps(); }); } public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('amount'); $table->string('product_code'); $table->string('weight'); $table->string('lang', 2); $table->text('images'); $table->integer('category_id')->unsigned()->index(); $table->foreign('category_id')->references('id')->on('product_categories')->onDelete('cascade'); $table->timestamps(); }); } 

Из вашего вопроса и комментариев я понимаю следующее.

Многие продукты могут иметь категорию «category_1», а «product_1» может принадлежать многим категориям.

Чтобы реализовать это, вы должны использовать отношения «Многие для многих». Я обновил ваш код, это может вам помочь.

Миграции:

 public function up() { Schema::create('product_categories', function (Blueprint $table) { $table->increments('id'); $table->string('category_name'); $table->string('lang', 2); $table->text('images'); $table->timestamps(); }); } public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('amount'); $table->string('product_code'); $table->string('weight'); $table->string('lang', 2); $table->text('images'); $table->timestamps(); }); } public function up() { Schema::create('products_product_category', function (Blueprint $table) { $table->integer('product_id'); $table->integer('product_category_id'); }); } 

модели

модель продукта:

 class Products extends Model { protected $table = 'products'; protected $guarded = ['id']; protected $casts = [ 'images' => 'array' ]; public function productCategories() { return $this->belongsToMany(ProductCategories::class,'products_product_category'); } } 

productCategories модель:

 class ProductCategories extends Model { protected $table = 'product_categories'; protected $guarded =['id']; protected $casts=[ 'images'=>'array' ]; public function products() { return $this->belongsToMany(Products::class, 'products_product_category'); } } 

контроллер

 public function store(RequestProducts $request) { try { $data = Products::create([ 'name' => $request->name, 'amount' => $request->amount, 'product_code' => $request->product_code, 'weight' => $request->weight ]); $data->productCategories()->sync($request->categories); } catch (Exception $ex) { ... } return redirect(route('manageProductCategories.index')); } 

Надеюсь, это поможет.