带有keyBy的Laravel响应返回对象和数组


Laravel response with keyBy returns object instead and array

我正在开发一个项目,用Laravel设置后端RESTful API,用angularJS设置Front-end。我刚从controller@index像这样的简单all()->toArray()

A。

return Response::json([
    'val' => myModel::all()->toArray()
]);

然后,有了这个有角度的物体,我可以做$scope.myArray=response.val之类的事情,最终也可以做$scope.myArrayBoundToATable.push(newelement)之类的动作。如果通过id对JSON进行键控,则生成的JSON会更好,因此我将其更改为:

B。

return Response::json([
    'res' => myModel::all()->keyBy('id')->toArray()
]);

但现在所有像.splice.push这样的函数都抛出了一个错误。通过登录控制台,我可以看到:有了all()->toArray():[Object],一切都很好。带有keyBy('id')->toArray():Object {1: Object}

我必须将$scope.myVar上的CRUD操作重写为JS对象,而不是数组。

我可以使用方法A.并迭代每个元素来搜索ID,但方法B.允许我以更优雅的方式访问元素:$scope.myVar(ID)

正如@lukasgieter所指出的,这是一个关联数组。为了便于前端消耗,只需使用array_values 将关联阵列转换为常规阵列即可

以下是我的处理方法。

Response::json(['val' => array_values(myModel::all())]);