Laravel - 使用唯一的 JSON 响应结构不正确

Posted

技术标签:

【中文标题】Laravel - 使用唯一的 JSON 响应结构不正确【英文标题】:Laravel - Incorrect JSON response structure when using unique 【发布时间】:2020-11-02 10:47:31 【问题描述】:

所以我有一个基本查询,它返回我们的Period 模型,这个查询可以选择通过Project 关系过滤这些时期。这是下面的精简版...

$query = Period::query();

$query->whereIn('project_id', [1, 2]);

$entries = $query->get();

$projects = $entries->pluck('project')->unique();

return response()->json($projects);

因此,鉴于上述代码,由于某种原因,返回的 JSON 不是对象数组,而是对象对象,例如 "0":, "2":。如果我删除 unique() 调用,那么它会正确返回一个对象数组。

带有和不带有唯一方法的集合都是Illuminate\Support\Collection 的实例,并且集合的items 属性都是对象数组,所以我看不出为什么它返回了差异结构。

我能看到的唯一区别是,当我用unique 调用dd 集合时,键是绿色的,而没有唯一调用它们是蓝色的,表示字符串和整数,但是当我这样做时$projects->keys() 它们都是整数(但 keys 可以将它们转换为整数吗?)。

使用unique 调用:

没有unique 调用:

【问题讨论】:

【参考方案1】:

我已经弄清楚了,unique 保留了项目的原始键,这意味着它们不一定按数字顺序排列,因此不能进行 JSON 编码,因此它会返回一个对象。

使用->unique()->values() 可以解决此问题。

【讨论】:

打败我吧 :)

以上是关于Laravel - 使用唯一的 JSON 响应结构不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 测试 JSON 响应

使用Laravel测试JSON响应

使用自定义 json 响应进行 Laravel 验证

对惯性响应和 json 响应使用相同的方法 Laravel Jetstream

用一个结构解码两个不同的 JSON 响应? [复制]

如何在javascript中使用laravel响应json