当前位置: 首页 > 知识库问答 >
问题:

Laravel资源集合中的筛选属性

马边浩
2023-03-14

在新的Laravel资源类中,您可以根据自己喜欢的任何内容删除属性。

如果您想返回许多项目,您可以使用该功能

Resource::collection()

但这不允许您在一个位置添加元数据。输入一个集合,太好了,这是一个很好的格式,能够添加元数据的许多项目。但是,您不能做的是筛选集合,您必须像使用资源一样隐藏属性。我能看到的唯一办法就是

foreach ($this->collection as $item) {
        if ($notAdmin) {
            $temp = array_except($item->toArray(), ['secret']);
        }
        $temp['links'] = ['self' => route('restaurant.show', [$item])];
        $data[] = $temp;
    }

我是不是错过了什么?对于资源收集来说,这似乎是一个被忽视的巨大能力

共有2个答案

郭胤
2023-03-14

好的,下面是您的操作方法:

>

集合创建一个RCollection,您可以在其中添加元数据。

Resource::collection(Model::all)传递到new RCollection()中。

类似这样的内容(从我的测试中):

Route::get('users/all', function() {
    return new \App\Http\Resources\Users(
        \App\Http\Resources\UserResource::collection(\App\User::get())
    );
});

工作起来很有魅力!

崔棋
2023-03-14

基于此线程,当使用ResourceCollection类自定义集合(例如BookCollection)时,Laravel似乎会查找一个名为相同但没有集合sufix类的资源类(在示例中,一个名为仅Book的类)。

因此,您需要有一个名为:Book的资源类,您可以在其中自定义要返回到响应的属性,还有一个名为:BookCollection的集合类,该集合类将使用Book自定义数据,还可以自定义元数据。

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Book extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
        ];
    }
}
<?php

namespace App\Http\Resources\Users;

use Illuminate\Http\Resources\Json\ResourceCollection;

class BookCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return $this->collection;
    }

    public function with($request)    
    {
        return [
            'meta' => [
                'key' => 'value',
            ],
        ];
    }
}
 类似资料:
  • 问题内容: 我有这样的实体: 还有一个: 使用Criteria API,我想通过过滤的Picturs获得唯一的AlbumD。我尝试这样的事情: 在这里,我得到了带有所有关联图片的相册。它们根本没有被过滤。当我尝试执行由记录器打印的查询时,只有给定eventId的图片数量只有四行,但是在“相册”中,我获取了所有图片。 我也尝试了其他ResultTransformers,但最终得到了很多结果(4),但

  • 我正在运行一个简单的maven项目(Maven3.3.9),其中包含配置文件和资源筛选。似乎总是在默认配置文件上进行筛选。 src/main/filters(默认)中有两个配置文件:config-dev.properties和config-prod.properties(仅包含一个变量application.env=development application.env=production 和s

  • 我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:

  • 22.7.1.Source Set 属性 下表列出了 Source Set 的一些重要属性, 更多细节请查看 SourceSet 的 API 文档. 表22.9.java 插件- Source Set 属性 配置名称 类型 默认值 描述 name String (read-only) Not null 用来识别source set的名称 output SourceSetOutput(read-on

  • 我有以下问题:我正在学习如何使用MongoDb和C#。可以在集合中插入项,但无法筛选现有集合以检索一个或多个符合查询条件的项。下面是我的类结构: 下面是我保存对象的方法: 并且正确保存了对象,正如您在图像中所看到的: 但是如何检索包含id为1234的对象事务的文档呢? 我使用的是.NET Core2和MongoDb C#驱动程序版本2.5。 编辑:集合是BsonDocument集合,它不是Tran

  • 我有这个pom结构,我正在尝试访问属性。我无法通过另一个属性中心的资源筛选访问此内容。端口,在属性部分中定义 在中,我有属性文件,它有这个 我就像这样进入财产 但它会打印 <代码>轮毂${集线器端口} 我提到了这个问题,但我无法访问该物业。