我试图使用范围创建方法,但我感觉我并没有完全达到我的期望。
我的桌子是:
Products:
- id;
- name
...
properties:
- id;
- name
- identifier
- data_type
- field_type
products_properties
- product_id
- property_id
product_property_integer_values | product_property_text_values | product_property_datetime_values | product_property_varchar_values
- product_properties_id;
- value (depending of the data data_type of properties, this could be integer, text, boolean or datetime
所以我需要的是能够通过属性ID来获取值。
例如,我在“产品模型”中的方法将是
public function scopeGetPropertyValue($query, $attribute)
{
$property = Property::where('identifier',$attribute)->first();
return $query...
}
然后像这样调用控制器
$product = Product::where('slug',$slug)->firstOrFail();
$brand = $product->getPropertyValue('brand');
什么是最好的方法?我无法使其正常工作或找到最佳方法,除了使用范围之外,还有其他更好的方法吗?
答案 0 :(得分:1)
@Levente Otta是正确的,可能您需要使用以下关系:
localhost
然后,您可以在控制器中像这样访问:
// App\Product
public function properties()
{
return $this->hasManyThrough(Property::class, ProductProperty::class);
}
public function brands() //this is for the brand property
{
return $this->properties()
->where('identifier', 'brand');
}
希望您能在这里找到要点。