【发布时间】:2021-06-05 11:08:10
【问题描述】:
我正在用 Laravel 中的关系数据急切地加载一个产品。
$product = Product::with('attributeValues.attribute')->find($id)->get();
目前我得到的响应结构如下。
{
"product_id": 1,
"product_name": "Shirt A",
"attribute_values": [
{
"attribute_value_id": 1,
"attribute_value": "small",
"attribute": {
"attribute_id": 1,
"attribute": "size"
}
},
{
"attribute_value_id": 1,
"attribute_value": "medium",
"attribute": {
"attribute_id": 1,
"attribute": "size"
}
},
...
]
}
我期望得到的结构如下。
{
"product_id": 1,
"product_name": "Shirt A",
"attribute": [
{
"attribute_id": 1,
"attribute": "size",
"attribute_values": [
{
"attribute_value_id": 1,
"attribute_value": "small"
},
{
"attribute_value_id": 1,
"attribute_value": "medium"
}
]
},
...
]
}
目前模型的关系如下
class Product extends Model {
public function attributeValues(){
return $this->belongsToMany(AttributeValue::class, 'product_attributes');
}
}
class AttributeValue extends Model {
public function attribute(){
return $this->belongsTo(Attribute::class);
}
}
class Attribute extends Model { }
目前,通过使用产品并使用原始查询分别获取其属性,我成功地正确获取了此结构。我正在尝试以一种 Eloquent 的方式来完成这项任务。
我的表如下
产品
+----+------+
| id | name |
+----+------+
产品属性
+----+------------+--------------------+
| id | product_id | attribute_value_id |
+----+------------+--------------------+
属性值
+----+--------------+-------+
| id | attribute_id | value |
+----+--------------+-------+
属性
+----+-----------+
| id | attribute |
+----+-----------+
【问题讨论】:
标签: laravel collections eloquent