Я работаю в сети электронной коммерции, где вы можете купить некоторые вещи, скажем, рубашки ... У меня есть три модели Item, ItemColor и ItemSize. Я установил отношения «многие ко многим», когда товар в магазине может иметь много цветов и размеров, но каждый из этих предметов будет иметь свой запас, вот где мне все сложно.
Если я создаю предмет, например рубашку Х, я могу прикрепить к этой рубашке различные цвета и размеры (от многих ко многим), рубашка черного цвета и размера М будет в наличии на складе, но как я могу это сделать? настроить так, что у каждого типа рубашки есть запас ?? Я не вижу этого ясно ...
Куда мне положить аттрибут? может быть в сводной таблице?
Вот мои модели и миграции:
//item model
protected $table = 'items';
public function colors()
{
return $this->belongsToMany('App\Models\ItemColor');
}
public function sizes()
{
return $this->belongsToMany('App\Models\ItemSize');
}
//tiemsize model
protected $table = 'item_sizes';
public function items()
{
return $this->belongsToMany('App\Models\Item');
}
//item colors
protected $table = 'item_colors';
public function items()
{
return $this->belongsToMany('App\Models\Item');
}
и миграции
//pivot table
Schema::create('item_size_color', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('item_id')->index();
$table->foreign('item_id')->references('id')->on('items');
$table->unsignedInteger('item_size_id')->index();
$table->foreign('item_size_id')->references('id')->on('item_sizes');
$table->unsignedInteger('item_color_id')->index();
$table->foreign('item_color_id')->references('id')->on('item_sizes');
$table->timestamps();
});
//items table
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
//items color table
Schema::create('item_colors', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
//items size table
Schema::create('item_sizes', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
Метод макета контроллера, как мне установить запас?
public function create(Create $request)
{
$item = new Item();
$item->colors->attach($request->input('availableColors'));
$item->sizes->attach($request->input('availableSizes'));
$item->sizes = $request->input('color');
$title = $request('title');
if($request->hasFile('image')){ $item->image = $this->uploadFile($request, 'image'); }
$item->save();
$item->load('sizes');
$item->load('colors');
return response()->json([
'item' => $item,
]);
}