我有这个代码
$list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t)
{
return $t->visitors->count();
});
return json_encode($list);
此代码返回对象,而不是数组。我该如何更改?
答案 0 :(得分:1)
您只需要调用->all()
集合方法,所以
$list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t)
{
return $t->visitors->count();
}
)->all();
这与->toArray()
方法不同,因为它还会将集合内的对象也强制转换为数组,并且不仅是集合本身(实际上->all()
不会强制转换任何内容,它只会返回集合中的元素)
答案 1 :(得分:1)
如果要在末尾添加实际的JSON数组,则应添加check_range=False
。
由于您可能会添加其他操作(例如过滤器和转换),因此我会在最后一刻致电->values()
:
->values()
在其他选项上使用return json_encode($list->values());
的原因是它会重置阵列键。如果您尝试返回一些关联数组(例如->values()
甚至是['name' => 'Roman']
),它将始终被编码为一个对象。您需要有一个普通数组(顺序整数键从0开始),以避免过滤和排序会发生意想不到的事情。
答案 2 :(得分:0)
$list = Elements::where('list_id', $id)->with('visitors')->get();;
此代码返回集合实例。 $collection->sortBy(...);
也是Collection实例。要在Collection中获取数组,必须使用或->toArray()
或->all()
您可以使用
$list = Elements::where('list_id', $id)->with('visitors')->get()->sortBy(function($t) {
return $t->visitors->count();
})->all();