Laravel:通过两个数据透视表的多态关系

时间:2018-12-05 17:00:40

标签: php laravel polymorphism many-to-many relation

我们正在Laravel框架中创建一个新的产品系统,在那里我们无法正确设置模型和数据透视之间的关系。情况可以显示如下: Situation

产品可以具有某些属性,例如颜色。这保存在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
{
    //
}

0 个答案:

没有答案