Laravel雄辩的响应转换无需foreach循环即可进行

时间:2018-12-26 06:40:44

标签: laravel eloquent

这是我的功能

public function listAllItems() {
  return $item = Item::with('taxes', 'quantities')->first();
}

响应:

{
"name": "TARGUS LAPTOP BAG",
"category": "BAG",
"subcategory": "LAPTOP BACKPACK",
"brand": "TARGUS",
"item_number": "236550364000001",
"description": "",
"cost_price": "0.00",
"unit_price": "6999.00",
"reorder_level": "1.000",
"item_id": 1,
"deleted": 0,
"taxes": [
{
"item_id": 1,
"name": "CGST",
"percent": "9.0"
},
{
"item_id": 1,
"name": "SGST",
"percent": "9.0"
}
],
"quantities": [
{
 "item_id": 1,
 "location_id": 5,
 "quantity": 0
},
{
 "item_id": 1,
 "location_id": 6,
 "quantity": 0
}
]
}

现在,如果我们看一下税收和数量的内部对象。我必须使用索引访问它们。如何使用“名称”(如果是税收)作为对象的键,并使用“百分比”作为值。

我想获取问题中所示的整个项目的详细信息,但税额和数量应作为键:基于内部字段的值。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

$taxes = $item->taxes->pluck('percent', 'name');
$quantities = $item->quantities->pluck('percent', 'name');

答案 1 :(得分:1)

有几种方法可以解决这个问题,就个人而言,我将使用一个转换器来创建最终的输出数组。 Laravel的JsonResource类是用于这种数据操作的。

或者,您可以手动映射和合并项目和目标集合,例如:

$item = Item::with('taxes', 'quantities')->first();

$taxes = array_reduce($item->taxes, function ($taxes, $tax) {
    return data_set($taxes, $tax->name, $tax->percent);
}, []);

$quantities = array_reduce($item->quantities, function ($quantities, $quantity) {
    return data_set($quantities, $quantity->name, $quantity->quantity);
}, []);

$arr = array_merge($item->attributesToArray(), $taxes, $quantities);