我在Laravel 5上创建应用程序并遇到问题。 我正在尝试创建产品的属性,这些属性依赖于属性类型(整数,字符串,布尔值)。
有一种'产品'表:
'属性'表:
产品型号代码:
class Product extends Model
{
public function properties()
{
return $this->belongsToMany(Property::class);
}
}
物业型号代码:
class Property extends Model
{
public function products()
{
return $this->belongsToMany(Product::class);
}
public function integers()
{
return $this->morphedByMany(PropertyInteger::class, 'property_type', 'product_property');
}
public function strings()
{
return $this->morphedByMany(PropertyString::class, 'property_type', 'product_property');
}
}
PropertyInteger代码(ProductString代码相同):
class PropertyInteger extends Model
{
public function properties()
{
return $this->morphToMany(Property::class, 'property_type', 'product_property');
}
}
然后我试图获取产品的所有属性及其值: (新的App \ Product) - > with([' properties',' properties.integers',' properties.strings']); 我得到的所有属性都属于产品型号,但在值中我获取了所有属性的所有值。
谢谢。
答案 0 :(得分:0)
您的关系数据模型应该修改为:
Produts:
id - int, pk, ai, uns
name - string
code - string
price - float null
Properties:
id - int, fk(Products(id)), uns
pnum - short, ai(by id), uns
name - string
code - string
- pk(id, pnum)
我编写了语法来描述以下关系:Properties
应该有一个复合主键(id, pnum)
,其中id
是Products
的外键(via {{ 1}})。如果给定产品只允许每种类型的一个属性,则id
可以是表示类型的小整数(为了清楚起见,您甚至可能需要单独的定义表。
要获得与“属性”匹配的结果集,您将执行内部联接(如果要省略不具有“属性”的“产品”)或使用“产品”作为左侧表的左外部联接。在任何一种情况下,连接谓词都是pnum
。
Ergo -
Products.id = Properties.id