带有 keyBy 的 Laravel 响应返回对象而不是数组
Posted
技术标签:
【中文标题】带有 keyBy 的 Laravel 响应返回对象而不是数组【英文标题】:Laravel response with keyBy returns object instead and array 【发布时间】:2015-04-14 21:12:31 【问题描述】:我正在开发一个项目,使用 Laravel 设置后端 RESTful API,使用 angularJS 设置前端。
我从我的控制器@index 返回简单的all()->toArray()
,如下所示:
一个。
return Response::json([
'val' => myModel::all()->toArray()
]);
然后,使用 Angular 中的对象,我可以执行 $scope.myArray=response.val
之类的操作,并最终执行 $scope.myArrayBoundToATable.push(newelement)
之类的操作。如果通过 id
键入结果 JSON 会更好,所以我将其更改为:
乙。
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)
。
【问题讨论】:
嗯,是的,这就是预期的结果。 JSON(和 javascript)不知道关联数组,所以它被转换成一个对象,每个 id 都有一个属性。 我认为你说得对,我没有意识到这一点(我的错,缺乏深刻的概念)。这没有什么大问题,我可以解决这些函数来执行 CRUD 操作以与非数组对象一起使用,并且'到现在为止 angular 都很好地支持它们(对于像 ng-repeat、ng-option 之类的东西)。现在我在实现类似codepen.io/jbltx/pen/WbdRRb 的东西时遇到了麻烦。这个 table 指令依赖于结构良好的 JSON 数组,并且对于重新排序、分页和类似的东西,它需要数组。我将继续阅读以更好地处理绑定到视图的数据。谢谢。 【参考方案1】:正如@lukasgieter 所指出的,这是一个关联数组。
为了便于前端使用,只需使用 array_values
将关联数组转换为常规数组
这是我的处理方式。
Response::json(['val' => array_values(myModel::all())]);
【讨论】:
以上是关于带有 keyBy 的 Laravel 响应返回对象而不是数组的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent / keyBy不适用于相关实体