【发布时间】:2020-02-11 20:01:06
【问题描述】:
使用 laravel 6 实现电子商务,用于捕获产品属性的 eav 模型如下;
问题是如何获取特定产品(例如:productno3)的产品属性(颜色)值当前实现获取所有属性(颜色)值。我们只需要 (ex:productno3) 颜色。
各表数据如下:
产品模型
class Product extends Model{
protected $fillable = ['name', 'brand', 'price', 'description', 'image_name'];
public function category(){
return $this->belongsTo(Category::class);
}
public function attributes(){
return $this->belongsToMany(Attribute::class,'products__attributes')->withTimestamps();
} }
属性模型
class Attribute extends Model{
public function products(){
return $this->belongsToMany(Product::class,'products__attributes')->withTimestamps();
}
public function values()
{
return $this->hasMany(Value::class);
}}
价值模型
class Value extends Model{
public function attribute()
{
return $this->belongsTo(Attribute::class);
}
public function productattributevalue()
{
return $this->hasMany(Attribute::class,'products_attributes_values');
}}
产品控制器
class ProductController extends Controller{
public function index()
{
// we need to get the productno3 colors from table ( products_attributes_values )
$product_no3 = Product::find(3)->attributes()->first()->values;dd($product_no3);}}
如何获取特定产品(例如:productno3)的产品属性(颜色)值当前实现获取所有属性(颜色)值。我们只需要 (ex:productno3) 颜色。productno3 应该只有红色和蓝色。
productno3 应该只有红色和蓝色。
SQL 转储位于此链接:SQL DUMP
【问题讨论】:
-
您的数据模型似乎是多余的,为什么值有一个属性 id?,这就是您得到 3 个结果的原因。
-
为什么你有product_values和products_attributes_values,你可以有一个表'products_attributes'并在里面保存product_id、attribute_id和value。现在你的表过于复杂了。另外,为什么不使用属性类型作为它的 ID,而不是递增的 ID。我假设您不会两次定义“颜色”属性。
-
@mrhn 我们有属性(颜色)和属性(大小),我们以后还可以有更多属性(例如:材料:木塑等),因为每个属性我需要知道它的价值!
-
这似乎过于复杂
-
@mrhn 你有其他选择吗?
标签: laravel database-design eloquent laravel-query-builder entity-attribute-value