我当前在laravel中遇到问题,其中Illuminate \ Database \ Eloquent \ Collection始终作为对象而不是作为数组返回—导致vue组件出现问题。
Route::get('/users', function (Request $request) {
$users = User::all();
$filtered = $users->filter( function ($user) {
if($user->can('viewAny', 'App\Module')){
return true;
}
});
return $filtered;
}
通过过滤器的所有内容都会拒绝隐式或显式转换为数组:
return User::all(); //Returns Array
return $filtered; //Returns object
return $filtered->toArray(); //Returns object?!
我在这里做错了什么? Laravel版本是5.8,$ filtered中的典型User对象如下:
3: {
id: 4,
first_name: "Alexandrea",
last_name: "Lind",
email: "russel.oda@example.net",
email_verified_at: "2019-09-25 20:35:03",
created_at: "2019-09-25 20:35:03",
updated_at: "2019-09-25 20:35:03",
is_admin: false,
cycle: 2019,
widening_access_pricing: 0,
can_comment: 1,
can_comment_without_approval: 0,
email_consent: "2019-09-25 20:35:03",
affiliate_id: null,
purchases: [
{
id: 28,
payment_intent_id: "pi_1FoAWUAsJiXFAGV72unvUP6a",
status: "succeeded",
user_id: 4,
product: null,
module_id: 6,
created_at: "2019-12-10 15:21:14",
updated_at: "2019-12-10 15:21:16"
}
],
completion_records: [
]
},
答案 0 :(得分:2)
如果您不需要以记录的“ id”作为键的数据,则可以在集合上调用values
来重置键:
return $filtered->values();
JSON无法将关联数组表示为数组,它必须将其表示为对象。索引为零的数组可以表示为JSON中的数组,因为其键是连续的,因此无需以任何特殊方式表示。
答案 1 :(得分:0)
我最近遇到了类似的问题,您只需要在过滤集合后调用all()方法,这就是laravel文档中集合过滤器的代码段。
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
$filtered->values();