根据模型的上下文返回数据透视表(是否作为关系加载?)

时间:2019-10-13 21:16:30

标签: php laravel eloquent laravel-6

我只是在考虑是否有可能根据加载的数据透视表来影响模型以返回值。

我所指的模型可以是产品,也可以是产品捆绑的一部分。

产品

class Product extends Model
{
    protected $fillable
        = [
            'title', 'price'
        ];

    public function productAttributes()
    {
        return $this->belongsToMany(ProductAttribute::class)
            ->withPivot('value', 'title');
    }

    public function productBundleAttributes()
    {
        return $this->belongsToMany(ProductAttribute::class,
            'product_product_attribute_bundle')
            ->withPivot('value', 'title');
    }
}

每个产品都有几个属性(型号:ProductAttributes)。在这里,每个属性也具有特定的值和数据透视表,该数据透视表指示哪些值将用于产品的属性。

示例

Product

  • title:鞋子
  • price:20美元

ProductAttributes

  • material:皮革
  • color:绿色

因此,产品可以具有多个属性(此处为material, color)。产品属性可以在中的其他位置定义,并通过产品的输入掩码分配给新产品。

但是,在新产品中,属性的标准值也应该能够被覆盖。示例:材料是皮革,但它是特殊皮革,因此属性的标题不再是“皮革”,而是“羔羊皮革”。

要实现此目的,每个产品属性都再次具有数据透视表。

现在对我来说太复杂了:

如果产品属于产品捆绑包,则它还应该具有这些数据透视表-但是,在产品捆绑包中更改产品属性不应更改实际产品的属性数据。因此,产品的属性有两个数据透视表:

  • 一个,如果您处于“产品”上下文中
  • 如果您处于“产品包”上下文中,则为一个。

现在的问题是:是否有一种方法可以查看该属性位于哪个上下文中,以使枢轴值更易于检索?

产品->属性->皮革->标题是否自动返回产品包数据透视表的标题(如果您在产品束上下文中)或产品数据透视表的标题(如果不是)?

0 个答案:

没有答案