Laravel Pivot表3个表之间的关系

问题描述 投票:0回答:1

我有一个包含以下列的数据透视表:

product_id
product_attribute_id
product_attribute_value_id

产品可以有许多属性,并且通过此属性有许多AttributeValues。

例如,属性可以是Color,其具有红色,蓝色,绿色和黄色作为AttributeValues。

但是,T恤产品可能具有“颜色属性”,但只选择“红色”和“蓝色”作为“属性值”。

我要做的是,基于此数据透视表,根据特定的产品ID获取所有属性和属性值。

我已经尝试过使用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');

编辑

然后我尝试切换查询,以便我首先获得ProductAttribute,因为@JonasStaudenmeir建议,但这不能正常工作。

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');
laravel pivot-table has-many
1个回答
0
投票

有一种简单的方法可以获得所需的结果,而无需调用许多方法。

你可以建立一个正常的关系(hasOne / hasMany)并通过它自己的关系调用关系,因为关系将被连接。所以,假设您想要获得产品的价值,您可以通过所有产品$product->attribute循环,然后您可以调用产品的价值$attribute->product_attribute_value->{value you need to have}

希望这可以帮助。祝好运

© www.soinside.com 2019 - 2024. All rights reserved.