Laravel返回“对象”而不是数组?

时间:2019-12-04 12:55:14

标签: laravel

我正在执行这样的查询以及其他一些查询,并通过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时,它变成了一个对象。我希望有人能告诉我如何防止这种情况并将其保留为数组,以便可以对其进行迭代?

谢谢。

根据要求输出的交易图片。 (由于敏感信息,导致很多内容模糊不清。)

2 个答案:

答案 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]);
    })