Ten*_*oru 41 laravel eloquent laravel-4
我正在尝试使用collection filter()方法过滤以下集合:
$collection = Word::all();
Run Code Online (Sandbox Code Playgroud)
JSON输出如下所示:
[
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
{
"id": "2",
"word": "sun",
"phonetic": "sun",
"mean": "s?o?ce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}, ...
]
Run Code Online (Sandbox Code Playgroud)
但是,在过滤集合时:
$filtered_collection = $collection->filter(function($item)
{
if($item->isDog())
{
return $item;
}
});
Run Code Online (Sandbox Code Playgroud)
过滤后的集合JSON输出如下所示:
{"1":
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
"2":
{
"id": "2",
"word": "sun",
"phonetic": "sun",
"mean": "s?o?ce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}}
Run Code Online (Sandbox Code Playgroud)
过滤集合时如何保留原始JSON输出?在过滤原始集合时,我想要一个我的Eloquent模型实例数组.提前致谢 :)
Jos*_*ber 104
集合的filter
方法调用array_filter
底层数组,根据PHP文档,它保留数组键.然后,这会导致您的数组转换为JavaScript对象而不是数组.
调用values()
您的集合以重置基础数组上的键:
$filtered_collection = $collection->filter(function ($item) {
return $item->isDog();
})->values();
Run Code Online (Sandbox Code Playgroud)
只需将其转换为JSON,并记住Laravel文档中的内容:
注意:过滤集合并将其转换为JSON时,请先尝试调用values函数以重置数组的键.
所以最终的代码是:
$filtered_collection->values()->toJson();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60365 次 |
最近记录: |