Laravel Eloquent API 资源:从响应中删除“data”键(集合)

作者:编程家 分类: laravel 时间:2025-10-28

使用 Laravel Eloquent API,我们可以轻松地构建和管理数据库查询。其中一个常见的需求是从 API 响应中删除 "data" 键,特别是当我们返回集合时。在本文中,我们将探讨如何通过编写自定义资源类来实现这一目标。

首先,让我们看一个简单的示例,展示如何使用 Laravel Eloquent API 返回一个包含 "data" 键的集合。假设我们有一个 "Users" 数据表,并希望通过 API 返回所有用户的信息。我们可以创建一个名为 "UserResource" 的资源类,如下所示:

php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource

{

public function toArray($request)

{

return [

'id' => $this->id,

'name' => $this->name,

'email' => $this->email,

// 其他用户属性

];

}

}

在这个资源类中,我们通过重写 `toArray` 方法来定义返回的数据结构。现在,让我们在控制器中使用这个资源类来返回用户信息:

php

namespace App\Http\Controllers;

use App\Models\User;

use App\Http\Resources\UserResource;

class UserController extends Controller

{

public function index()

{

$users = User::all();

return UserResource::collection($users);

}

}

当我们访问 `/users` 路由时,API 将返回一个 JSON 响应,其中包含一个 "data" 键,其值是用户的集合。这是默认行为。

现在,让我们来看看如何从响应中删除 "data" 键。为了实现这一点,我们需要在资源类中使用 `withoutWrapping` 方法。让我们更新我们的 "UserResource" 类:

php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource

{

public function toArray($request)

{

return [

'id' => $this->id,

'name' => $this->name,

'email' => $this->email,

// 其他用户属性

];

}

public function with($request)

{

return [];

}

public static function collection($resource)

{

return tap(new UserResourceCollection($resource), function ($collection) {

$collection->collects = __CLASS__;

});

}

}

在这个更新后的资源类中,我们添加了 `with` 方法并返回一个空数组,以确保 "data" 键不会出现在响应中。我们还重写了 `collection` 方法,并在其中指定了资源类的名称。

现在,当我们访问 `/users` 路由时,API 将返回一个不包含 "data" 键的 JSON 响应,而只有用户的集合。

通过使用 Laravel Eloquent API,我们可以轻松地构建和管理数据库查询。在返回集合时,API 默认会将数据包装在一个 "data" 键中。然而,有时我们可能需要从响应中删除这个键。通过编写自定义资源类,我们可以实现这一目标。在资源类中,我们可以通过重写 `with` 方法返回一个空数组,以确保 "data" 键不会出现在响应中。我们还可以重写 `collection` 方法,并在其中指定资源类的名称。这样,我们就能够从响应中删除 "data" 键,并以更简洁的方式返回集合数据。

希望本文能够帮助你在使用 Laravel Eloquent API 时更好地管理响应数据。祝你编码愉快!