gpt4 book ai didi

laravel - 使用 $collection->filter() 过滤 Eloquent 集合数据

转载 作者:行者123 更新时间:2023-12-02 01:45:13 30 4
gpt4 key购买 nike

我正在尝试使用集合filter()方法过滤以下集合:

$collection = Word::all();

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"
}, ...
]

但是,在过滤集合时:

$filtered_collection = $collection->filter(function($item)
{
if($item->isDog())
{
return $item;
}
});

过滤后的集合 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"
}}

过滤集合时如何保留原始 JSON 输出?我希望在过滤原始集合时拥有一组 Eloquent 模型实例。

最佳答案

集合的 filter 方法在底层数组上调用 array_filteraccording to the PHP docs ,保留数组键。这会导致您的数组被转换为 JavaScript 对象而不是数组。

在集合上调用 values() 以重置底层数组上的键:

$filtered_collection = $collection->filter(function ($item) {
return $item->isDog();
})->values();
<小时/>

旁注:在较新版本的 Laravel 中,您可以使用 higher order message将上面的内容缩短为:

$filtered_collection = $collection->filter->isDog()->values();

关于laravel - 使用 $collection->filter() 过滤 Eloquent 集合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974402/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com