我有一个数据透视表,其中包含以下列:
product_id
product_attribute_id
product_attribute_value_id
一个产品可以有很多属性,通过这个属性可以有很多AttributeValues。
例如,一个属性可以是颜色,它具有红色,蓝色,绿色和黄色作为AttributeValues。
但是,T恤产品可以具有颜色属性,但是只有红色和蓝色被选为属性值。
我想做的是,基于此数据透视表,根据特定的产品ID获取所有属性和AttributeValue。
我尝试使用hasManyDeep软件包(https://github.com/staudenmeir/eloquent-has-many-deep),该软件包使我获得了AttributeValues的集合,但不是我所需的格式。
该包为我提供了一个AttributeValues数组,每个都有Attribute关系。我需要的是一个属性数组,每个属性都有AttributeValues。
这是到目前为止我尝试过的软件包:
return $this->hasManyDeep(
ProductAttributeValue::class,
[ProductOptionValue::class, ProductAttribute::class],
['product_id', 'id', 'product_attribute_id'],
['id', 'product_attribute_id', 'id'])
->whereColumn('product_attribute_values.id', '=', 'product_product_option_values.product_attribute_value_id')
->withIntermediate(ProductAttribute::class, ['*'], 'attribute');
编辑
然后我尝试切换查询,以便首先按照@JonasStaudenmeir的建议获取ProductAttribute,但这不能正常工作。
return $this->hasManyDeep(
ProductAttribute::class,
[ProductOptionValue::class, ProductAttributeValue::class],
['product_id', 'id', 'id'],
['id', 'product_attribute_value_id', 'product_attribute_id'])
->whereColumn('product_attributes.id', '=', 'product_product_option_values.product_attribute_id')
->withIntermediate(ProductAttributeValue::class, ['*'], 'attribute');
答案 0 :(得分:0)
有一种无需调用许多方法即可获得所需结果的简便方法。
您可以建立一个普通关系(hasOne / hasMany)并通过自身的关系调用该关系,因为该关系将被连接。因此,假设您要获得产品的价值,可以遍历所有产品$product->attribute
,然后可以将产品的价值称为$attribute->product_attribute_value->{value you need to have}
希望这会有所帮助。祝你好运