我正在执行这样的查询以及其他一些查询,并通过response()->json()
返回它们。
$transactions = Transaction::where('created_at', '>=',
now()->firstOfYear())->get()->groupBy(function ($transaction)
{
return Carbon::parse($transaction->created_at)->format('M');
});
return response()->json([
'user' => $user->toArray(),
'transactions' => $transactions->toArray()
]);
但是,虽然事务是php中的数组,但是当它通过response()-> json时,它变成了一个对象。我希望有人能告诉我如何防止这种情况并将其保留为数组,以便可以对其进行迭代?
谢谢。
答案 0 :(得分:2)
您的数组用月份名称作为关键字,这意味着它是一个关联数组。如果希望JSON为数组,则需要对PHP数组进行数字索引。
您可以选择的一个方法(未试用):
$userArray = [];
foreach ($user as $key => $value) {
$userArray[] = (object) [
'month' => $key,
'data' => $value,
];
}
return response()->json([
'user' => $userArray,
'transactions' => $transactions->toArray()
]);
这将使它成为对象的数字索引数组,其中月份是对象的一个属性,另一个是包含其余数据的属性。
答案 1 :(得分:0)
我以前使用的一种解决方案是在前端检查数据是数组还是对象,并且如果它是对象,只需将其转换为数组即可。关联数组将转换为JavaScript中的对象,除非其键从0开始并像普通数组索引一样递增。
执行此操作的示例:
window.axios.post('api/endpoint', data)
.then(res => {
const transactions = Array.isArray(res.data.transactions)
? res.data.transactions
: Object.keys.(res.data.transactions).map(key => response.data.transactions[key]);
})