[ Laravel 5.2 文档 ] Eloquent ORM -- 序列化
1、简介
当构建JSONAPI 时,经常需要转化模型和关联关系为数组或 JSON。Eloquent 包含便捷方法实现这些转换,以及控制哪些属性被包含到序列化中。
2、基本使用
转化模型为数组
要转化模型及其加载的关联关系为数组,可以使用 toArray方法。这个方法是递归的,所以所有属性及其关联对象属性(包括关联的关联)都会被转化为数组:
$user = App\User::with('roles')->first();return $user->toArray();
还可以转化集合为数组:
$users = App\User::all();return $users->toArray();
转化模型为 JSON
要转化模型为 JSON,可以使用 toJson方法,和 toArray一样, toJson方法也是递归的,所有属性及其关联属性都会被转化为 JSON:
$user = App\User::find(1);return $user->toJson();
你还可以转化模型或集合为字符串,这将会自动调用 toJson方法:
$user = App\User::find(1);return (string) $user;
由于模型和集合在转化为字符串的时候会被转化为 JSON,你可以从应用的路由或控制器中直接返回 Eloquent 对象:
Route::get('users',function(){ return App\User::all();});
3、在 JSON 中隐藏属性
有时候你希望在模型数组或 JSON 显示中隐藏某些属性,比如密码,要实现这个,在定义模型的时候设置 $hidden属性:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 在数组中隐藏的属性 * * @var array */ protected $hidden = ['password'];}
注意:如果要隐藏关联关系,使用关联关系的方法名,而不是动态属性名。
此外,可以使用 visible属性来定义模型数组和 JSON 显示的属性白名单:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 在数组中显示的属性 * * @var array */ protected $visible = ['first_name', 'last_name'];}
临时暴露隐藏属性
如果你想要在特定模型中临时显示隐藏的属性,可以使用 makeVisible方法,该方法以方法链的方式返回模型实例:
return $user->makeVisible('attribute')->toArray();
4、追加值到 JSON
有时候,需要添加数据库中没有的字段到数组中,要实现这个功能,首先要为这个值定义一个访问器:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 为用户获取管理员标识 * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] == 'yes'; }}
定义好访问器后,添加字段名到该模型的 appends属性:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 追加到模型数组表单的访问器 * * @var array */ protected $appends = ['is_admin'];}
字段被添加到 appends列表之后,将会被包含到模型数组和 JSON 中, appends数组中的字段还会遵循模型中配置的 visible和 hidden设置。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Long URLs, often cluttered with keywords and tracking parameters, can deter visitors. A URL shortening script offers a solution, creating concise links ideal for social media and other platforms. These scripts are valuable for individual websites a

Following its high-profile acquisition by Facebook in 2012, Instagram adopted two sets of APIs for third-party use. These are the Instagram Graph API and the Instagram Basic Display API.As a developer building an app that requires information from a

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

This is the second and final part of the series on building a React application with a Laravel back-end. In the first part of the series, we created a RESTful API using Laravel for a basic product-listing application. In this tutorial, we will be dev

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

The 2025 PHP Landscape Survey investigates current PHP development trends. It explores framework usage, deployment methods, and challenges, aiming to provide insights for developers and businesses. The survey anticipates growth in modern PHP versio
