bersiri
- Pengenalan
- Bina J Apabila menggunakan SON API, selalunya perlu untuk menukar model dan persatuan kepada Array atau JSON. Untuk operasi ini, Eloquent menyediakan beberapa kaedah mudah dan kawalan harta dalam penyirian.
Sirikan kepada tatasusunan
Untuk menukar model dan perkaitannya yang dimuatkan kepada tatasusunan, anda boleh menggunakan kaedah
toArray
. Ini ialah kaedah rekursif, jadi semua sifat dan perhubungan (termasuk perhubungan yang berkaitan) akan ditukar kepada tatasusunan:toArray
方法。这是一个递归的方法,因此所有的属性和关联(包括关联的关联)都将转化成数组:$user = App\User::with('roles')->first();return $user->toArray();
也可以转化整个模型 集合 为数组:
$users = App\User::all();return $users->toArray();
序列化为 JSON
方法
toJson
可以把模型转化成 JSON。和方法toArray
一样,toJson
方法也是递归的,因此所有属性和关联都会转化成 JSON, 你还可以指定由 PHP 支持的 JSON 编码选项:$user = App\User::find(1); return $user->toJson(); return $user->toJson(JSON_PRETTY_PRINT);
也可以把模型或集合转成字符串,方法
toJson
将自动调用:$user = App\User::find(1); return (string) $user;
由于模型和集合在转化为字符串的时候会转成 JSON, 因此可以在应用的路由或控制器中直接返回 Eloquent 对象:
Route::get('users', function () { return App\User::all(); });
隐藏 JSON 属性
有时要将模型数组或 JSON 中的某些属性进行隐藏,比如密码,则可以在模型中添加
$hidden
属性:<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 数组中的属性会被隐藏。 * * @var array */ protected $hidden = ['password']; }
{note} 隐藏关联时,需使用关联的方法名。
此外,也可以使用属性
$visible
定义一个模型数组和 JSON 可见的白名单。转化后的数组或 JSON 不会出现其他的属性:<?phpnamespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 数组中的属性会被展示。 * * @var array */ protected $visible = ['first_name', 'last_name']; }
临时修改可见属性
如果需要在一个模型实例中显示隐藏的属性,就可以使用
makeVisible
方法。方法makeVisible
返回模型实例:return $user->makeVisible('attribute')->toArray();
相应地,需要在一个模型实例中隐藏可见的属性,则可以使用
makeHidden
方法。return $user->makeHidden('attribute')->toArray();
追加 JSON 值
有时,需要在数组或 JSON 中添加一些数据库没有字段对应的属性。 要实现这个功能,先为其定义一个访问器:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 为用户获取管理员标识。 * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] == 'yes'; } }
然后,在模型属性
appends
中添加该属性名。注意,尽管访问器使用「驼峰命名法」方式定义,但是属性名通常以「蛇形命名法」方式引用。<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 追加到模型数组表单的访问器。 * * @var array */ protected $appends = ['is_admin']; }
使用
append
方法追加属性后,它将包含在模型的数组和 JSON 中。appends
数组中的属性也将遵循模型上配置的visible
和hidden
设置。运行时追加
在单个模型实例上,使用方法
append
追加属性,或者,使用方法setAppends
return $user->append('is_admin')->toArray(); return $user->setAppends(['is_admin'])->toArray();
Anda juga boleh menukar keseluruhan koleksi model kepada tatasusunan:protected $casts = [ 'birthday' => 'date:Y-m-d', 'joined_at' => 'datetime:Y-m-d H:00', ];
Serialized to JSON🎜🎜KaedahtoJson
boleh menukar model kepada JSON. Seperti kaedahtoArray
, kaedahtoJson
adalah rekursif, jadi semua sifat dan perhubungan ditukar kepada JSON Anda juga boleh menentukan JSON yang disokong oleh PHP Pilihan pengekodan 🎜: 🎜<?php namespace App\Providers; use Illuminate\Support\Carbon; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{ /** * 执行注册后,启动服务 * * @return void */ public function boot() { Carbon::serializeUsing(function ($carbon) { return $carbon->format('U'); }); } /** * 在服务容器中注册绑定 * * @return void */ public function register() { // } }
🎜 Anda juga boleh menukar model atau koleksi kepada rentetan, kaedahtoJson
akan menjadi dipanggil secara automatik :🎜rrreee🎜Memandangkan model dan koleksi ditukar kepada JSON apabila ditukar kepada rentetan, objek Eloquent boleh dikembalikan terus dalam laluan atau pengawal aplikasi: 🎜rrreee🎜🎜 🎜🎜Sembunyikan atribut JSON
🎜Kadangkala anda ingin menyembunyikan beberapa atribut dalam tatasusunan model atau JSON, seperti kata laluan, kemudian Anda boleh menambah atribut$hidden
kepada model: 🎜rrreee🎜{note} Apabila menyembunyikan perkaitan, anda perlu menggunakan nama kaedah yang berkaitan. 🎜
🎜Selain itu, anda juga boleh menggunakan atribut$visible
untuk mentakrifkan tatasusunan model dan senarai putih yang boleh dilihat oleh JSON. Tiada atribut lain akan muncul dalam tatasusunan atau JSON yang ditukar: 🎜rrreee🎜Ubah suai atribut yang boleh dilihat buat sementara waktu
🎜Jika diperlukan dalam contoh model Untuk dipaparkan sifat tersembunyi, anda boleh menggunakan kaedahmakeVisible
. KaedahmakeVisible
mengembalikan contoh model: 🎜rrreee🎜Sehubungan itu, jika anda perlu menyembunyikan atribut yang boleh dilihat dalam contoh model, anda boleh menggunakan kaedahmakeHidden
. 🎜rrreee🎜🎜🎜🎜Melampirkan nilai JSON
🎜Kadangkala, anda perlu untuk Menambah beberapa sifat pada tatasusunan atau JSON yang tidak mempunyai medan yang sepadan dalam pangkalan data. Untuk melaksanakan fungsi ini, mula-mula tentukan pengakses untuknya: 🎜rrreee🎜 Kemudian, tambahkan nama atribut pada atribut modeltambah
. Ambil perhatian bahawa walaupun pengakses ditakrifkan menggunakan camelCase, nama hartanah biasanya dirujuk menggunakan SnakeCase. 🎜rrreee🎜Selepas menambahkan harta menggunakan kaedahtambah
, ia akan disertakan dalam tatasusunan model dan JSON. Sifat dalam tatasusunantambah
juga akan menghormati tetapankelihatan
dantersembunyi
yang dikonfigurasikan pada model. 🎜🎜Tambahan Masa Jalan
🎜Pada contoh model tunggal, gunakan kaedahtambah
untuk menambah atribut, atau, gunakan KaedahsetAppends
menulis semula keseluruhan susunan atribut yang ditambahkan: 🎜rrreee🎜🎜🎜🎜🎜🎜Tarikh bersiri
Sesuaikan format tarikh mana-mana atribut
Anda boleh menyesuaikan format tarikh untuk atribut tarikh secara individu dalam penukaran jenis atribut Eloquent:
CarrreeePenyesuaian global Karbon
Penyesuaian global Lara Ini memberikan kemudahan untuk penyiaran JSON Carbon. Untuk menyesuaikan siri semua tarikh Karbon merentas aplikasi anda, anda boleh menggunakan yang menerima penutupan yang mengembalikan tarikh sebagai rentetan.
Artikel ini pertama kali diterbitkan di laman webCarbon::serializeUsing
方法。方法serializeUsing
rrreee