我具有以下数据库结构,但是我很难理解使用Laravel在每个表之间的关系如何工作。
此外,更新产品时如何生成所有产品变体值和产品变体?我不想做多个单一查询。 Laravel有可能吗?
PRODUCTS - hasMany Options
========
product_id product_name
---------- ------------
1 Widget 1
2 Widget 2
3 Widget 3
OPTIONS - hasMany Option Values
=======
option_id option_name
--------- -----------
1 Size SL
2 Color
3 Size SM
4 Class
5 Size ML
OPTION_VALUES - belongsTo Options
=============
option_id value_id value_name
--------- -------- ------------
1 1 Small (Size SL)
1 2 Large (Size SL)
2 1 White (Color)
2 2 Black (Color)
3 1 Small (Size SM)
3 2 Medium (Size SM)
4 1 Amateur (Class)
4 2 Professional (Class)
5 1 Medium (Size ML)
5 2 Large (Size ML)
PRODUCT_OPTIONS - belongsToMany Products and Product Options
===============
product_id option_id
---------- ---------
1 1 (Widget 1; Size SL)
1 2 (Widget 1; Color)
2 3 (Widget 2; Size SM)
3 4 (Widget 3; Class)
3 5 (Widget 4; Size ML)
PRODUCT_VARIANTS - ???
================
product_id variant_id sku_id
---------- ---------- ------
1 1 W1SSCW (Widget 1)
1 2 W1SSCB (Widget 1)
1 3 W1SLCW (Widget 1)
1 4 W1SLCB (Widget 1)
2 1 W2SS (Widget 2)
2 2 W2SM (Widget 2)
3 1 W3CASM (Widget 3)
3 2 W3CASL (Widget 3)
3 3 W3CPSM (Widget 3)
3 4 W3CPSL (Widget 3)
VARIANT_VALUES - ???
==============
product_id variant_id option_id value_id
---------- ---------- --------- --------
1 1 1 1 (W1SSCW; Size SL; Small)
1 1 2 1 (W1SSCW; Color; White)
1 2 1 1 (W1SSCB; Size SL; Small)
1 2 2 2 (W1SSCB; Color; Black)
1 3 1 2 (W1SLCW; Size SL; Large)
1 3 2 1 (W1SLCW; Color; White)
1 4 1 2 (W1SLCB; Size SL; Large)
1 4 2 2 (W1SLCB; Color; Black)
2 1 3 1 (W2SS; Size SM; Small)
2 2 3 2 (W2SM; Size SM; Medium)
3 1 4 1 (W3CASM; Class; Amateur)
3 1 5 1 (W3CASM; Size ML; Medium)
3 2 4 1 (W3CASL; Class; Amateur)
3 2 5 2 (W3CASL; Size ML; Large)
3 3 4 2 (W3CPSM; Class; Professional)
3 3 5 1 (W3CPSM; Size ML; Medium)
3 4 4 2 (W3CPSL; Class; Professional)
3 4 5 2 (W3CPSL; Size ML; Large)
我在每个表名旁边写了我认为它具有的关系,我不完全了解的关系有???
答案 0 :(得分:0)
好吧,我将使用两个表来说明laravel关系,
您的模型应该看起来像
use Illuminate\Database\Eloquent\Model;
class products extends Model
{
protected $fillable=['product_id','product_name'];
public function options(){
return $this->hasMany('App\options');
}
}
,下一个选项模型应该类似于
use Illuminate\Database\Eloquent\Model;
class options extends Model
{
protected $fillable=['option_id','option_detail'];
public function product(){
return $this->belongsTo('App\product');
}
}
记住要像这样在选项模型上设置外键约束
$table->foreign('option_id')->references('id')->on('product');
然后您可以像这样通过产品表访问选项表
$product->options->option_name;
答案 1 :(得分:0)
无法从表格中获得清晰的主意。我能看出来的是:
有Products
,例如[Widget 1,Widget2等]
每种产品都可以具有Variants
,例如[sku1,sku2等]
每个变体还可以具有Options/Specifications
,例如[Size,Color,Class等]
最后,每个Options\Specification
的值都可以像[大小:小,班级:专业等]
对吗?
仅在理解数据后才能建议您表的结构和关系。