【问题标题】:Remove null from Laravel resources collection从 Laravel 资源集合中删除 null
【发布时间】:2020-01-05 02:19:40
【问题描述】:

我使用resources 构建了一个 Laravel API。它返回一个collection 加上一些额外的元数据。我想删除null 项目而不丢失我格式化的JSON 响应。 注意:我尝试了filter 方法,但它从JSON 响应中删除了“data”和“extra_meta”。换句话说,它对collection 进行了重大更改,而不仅仅是删除了null 项目。

{
    "data": [
        {
            "data_1": "some data"
        },
        {
            "data_1": "some data"
        },
        null,
        null,
        null,
        null,
        null,
        null
    ],
    "extra_meta": {
        "meta_1": "some meta"
    }
}

这是使用resource的简化代码

       return $collection = someResource::collection($somthing)->additional([
            'extra_meta' => [
                'meta_1' => $request->metaInfo,
            ],
        ]);

【问题讨论】:

  • 与其试图删除它们,不如从一开始就阻止它们进入收藏夹。为什么null 值会通过?

标签: php json laravel eloquent laravel-resource


【解决方案1】:

@马诺。

在 php 文档中,我们有一个名为 array_filter() 的函数,如果你像这样使用它:

echo (array_filter($data, function($value) { return !is_null($value) && $value !== ''; }))

函数array_filter() 使用时没有回调(第二个参数)删除数组中的所有空键,但您可以自定义函数应用回调,如上面的代码,我放置一个只返回的函数不为空且不同于 ''。

希望对你有所帮助。

编辑:我建议您将数据数组放在一个单独的变量中

$data = <json response>['data'];

在此之后使用该功能,

在此处查看 PHP 文档 https://www.php.net/manual/en/function.array-filter.php

【讨论】:

  • 集合是一个对象而不是数组,我不能使用您的建议来创建一个单独的数组“数据”,然后过滤它,然后用“extra_meta”重新加入它,因为这会使响应非常缓慢。我宁愿坚持空值而不是你的建议
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 2023-03-12
  • 2022-07-26
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2020-07-04
相关资源
最近更新 更多