我们正在Laravel框架中创建一个新的产品系统,在那里我们无法正确设置模型和数据透视之间的关系。情况可以显示如下:
产品可以具有某些属性,例如颜色。这保存在morph_has_attributes
表中。但是,我们也想设置此“颜色”属性的值。通过在attribute_value_id
表中包含morph_has_attributes
可以很容易地做到这一点。但是,我们希望能够将多个值绑定到属性,这就是为什么数据透视表和属性值之间存在多对多关系的原因。
一个例子: 我出售的汽车(产品)具有多种颜色(属性):绿色和红色(值)。
我发现了following Article,它看起来像我的情况,但是在他们的情况下,AttributeValue是键而不是MorphHasAttributeValue。
我的目标是在产品(或搜索,由于多态关系而相似)和AttributeValues之间建立关系。
我当前使用的关系如下:
产品类别
class Product extends Model
{
/**
* Get all of the attributeTypes for the product.
*/
public function attributeTypes()
{
return $this->morphToMany('App\AttributeType', 'morph', 'morph_has_attributes');
}
/**
* Get all of the morphHasAttributeValues pivots for the product.
*/
public function morphHasAttributeValues()
{
return $this->hasMany('App\Pivots\MorphHasAttributeValue')
->using('App\Pivots\MorphHasAttribute');
}
/**
* The attributeValues that are bound to this product .
*/
public function attributeValues()
{
// How do I do this?
}
}
MorphHasAttribute类
class MorphHasAttribute extends MorphPivot
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'morph_has_attributes';
public function products()
{
return $this->belongsTo('App\Product');
}
public function searches()
{
return $this->belongsTo('App\Search');
}
public function productHasAttributeValues()
{
return $this->belongsTo('App\ProductHasAttributeValue');
}
public function attributeValues()
{
return $this->belongsToMany('App\AttributeValue', 'morph_has_attribute_value');
}
}
MorphHasAttributeValue类
class MorphHasAttributeValue extends Pivot
{
public function products()
{
return $this->belongsToMany('App\Product')
->using('App\Pivots\MorphHasAttribute');
}
}
AttributeValue类
class AttributeValue extends Model
{
//
}