Я создаю сайт электронной коммерции, который имеет Products with variation
(Продукты с множественным выбором), например, футболка может иметь variation/attribute
из Color and Size
со следующим Options
из White, Black, Blue and Large, Medium, Small
соответственно.
До Variation and options
У меня есть следующее Eloquent Model
:
`
class Product extends Model
{
public $with = ['variations'];
public function variations(){
return $this->belongsToMany(\App\Variation::class, 'option_product_variations')
->withPivot(["id","unit_selling_cost"]);
}
}
`
`
class Variation extends Model
{
public $with = ['options','option_product_variations'];
public function options()
{
return $this->hasMany(\App\Option::class);
}
public function products(){
return $this->belongsToMany(\App\Product::class, 'option_product_variations');
}
public function option_product_variations()
{
return $this->hasMany(\App\Option_product_variation::class);
}
}
`
`
class Option extends Model
{
protected $fillable = ['variation_id','title','slug','remark'];
protected $primaryKey = 'id';
public $with = ['option_product_variations'];
public function variation()
{
return $this->belongsTo(\App\Variation::class);
}
public function option_product_variations()
{
return $this->hasMany(\App\Option_product_variation::class);
}
}
`
`
class Option_product_variation extends Model
{
protected $fillable = ['product_unique_code','product_id','variation_id','option_id','unit_purchase_cost','unit_selling_cost','qty'];
public function variation()
{
return $this->belongsToOne(\App\Variation::class);
}
public function option()
{
return $this->belongsToOne(\App\Option::class);
}
}
`
`
public function up()
{
Schema::create('option_product_variations', function (Blueprint $table) {
$table->increments('id');
$table->string('product_unique_code')->unique();
$table->integer('product_id')->unsigned();
$table->integer('variation_id')->unsigned();
$table->integer('option_id')->unsigned();
$table->decimal('unit_purchase_cost',10,2)->default(0.00);
$table->decimal('unit_selling_cost',10,2)->default(0.00);
$table->integer('qty')->nullable();
$table->timestamps();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->foreign('variation_id')->references('id')->on('variations')->onDelete('cascade');
$table->foreign('option_id')->references('id')->on('options')->onDelete('cascade');
});
}
`
Как определить отношение так, чтобы можно было загружать все варианты и опции, связанные с продуктом, после запроса модели продукта?
Я открыт для лучшего предложения по структурированию моей модели Eloquent для повышения эффективности.
Задача ещё не решена.
Других решений пока нет …