laravel 基礎教程 —— 序列化

Eloquent: 序列化

簡介

當構(gòu)建 JSON APIs 時猖任,你需要經(jīng)常的將你的模型和關聯(lián)轉(zhuǎn)換為數(shù)組或者 JSON 格式补履。Eloquent 包含了便捷的方法來進行這些轉(zhuǎn)換,以及控制哪些屬性應該包含在序列化之中太伊。

基礎用法

轉(zhuǎn)換模型到數(shù)組

為了將一個模型和其關聯(lián)加載的數(shù)據(jù)轉(zhuǎn)換為數(shù)組雇锡,你需要使用 toArray 方法。這個方法是一個遞歸的方法僚焦,所以所有的屬性和所有的關聯(lián)(包括關聯(lián)的關聯(lián))都會被轉(zhuǎn)換為數(shù)組:

$user = App\User::with('roles')->first();

return $user->toArray();

你也可以將集合轉(zhuǎn)換為數(shù)組:

$users = App\User::all();

return $users->toArray();

轉(zhuǎn)換模型到 JSON

你可以使用 toJson 方法來將一個模型轉(zhuǎn)換為 JSON锰提。就像 toArray 方法,toJson 方法也是遞歸方法芳悲,所以所有的屬性和其關聯(lián)將會被轉(zhuǎn)換為 JSON:

$user = App\User::find(1);

return $user->toJson();

另外立肘,你可以轉(zhuǎn)換模型或者集合到一個字符串中,它將會自動的調(diào)用 toJson 方法:

$user = App\User::find(1);

return (string) $user;

由于模型和集合都會在轉(zhuǎn)換為字符串時被自動的轉(zhuǎn)換為 JSON名扛。所以你可以直接在應用的路由或者控制器中返回 Eloquent 對象:

Route::get('users', function () {
  return App\User::all(); 
});

從 JSON 中隱藏屬性

有時候你可能會選擇限制一些屬性的展示谅年,比如,密碼肮韧,這些本應包含在模型中的數(shù)值或者 JSON 中的屬性融蹂。你可以在模型中定義 $hidden 屬性來選擇隱藏它們:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
  /**
   * The attributes that should be hidden for arrays.
   *
   * @var array
   */
  protected $hidden = ['password'];
}

注意:當隱藏一些關聯(lián)時旺订,你應該使用關聯(lián)模型的名字,而不是動態(tài)屬性的名字超燃。

另外区拳,你也可以使用 visible 屬性來定義一個白名單屬性集來指明這些屬性應該被包含在模型的數(shù)組或者 JSON 里:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
  /**
   * The attributes that should be visible in arrays.
   *
   * @var array
   */
  protected $visible = ['first_name', 'last_name'];
}

臨時的修改屬性的可見性

如果你希望在給定的模型實例中來設置一些通常隱藏的屬性為可見,你可以使用 makeVisible 方法意乓。makeVisible 方法將返回模型實例劳闹,這樣有利于鏈式調(diào)用:

return $user->makeVisible('attribute')->toArray();

同樣,如果你希望在給定的模型實例中設置通城⑺玻可見的屬性為不可見本涕,那么你可以使用 makeHidden 方法:

return $user->makeHidden('attribute')->toArray();

追加值到 JSON

偶爾,你可能需要在模型中添加一些數(shù)據(jù)庫中不存在的字段的屬性伙窃。那么菩颖,你需要先為這個值定義一個訪問器:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
  /**
   * Get the administrator flag for the user.
   *
   * @return bool
   */
  public function getIsAdminAttribute()
  {
    return $this->attributes['admin'] == 'yes';
  }
}

當你創(chuàng)建完訪問器之后,將其屬性的名稱添加到模型的 appends 屬性中:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
  /**
   * The accessors to append to the model's array form.
   *
   * @var array
   */
  protected $appends = ['is_admin'];
}

當你在 appends 列表中加入屬性之后为障,它就會被加入到模型的數(shù)組和 JSON 形式中晦闰。在 appends 數(shù)組中的屬性也受到模型中的 visiblehidden 設置的約束。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳍怨,一起剝皮案震驚了整個濱河市呻右,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鞋喇,老刑警劉巖声滥,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侦香,居然都是意外死亡落塑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門罐韩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憾赁,“玉大人,你說我怎么就攤上這事散吵×迹” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵矾睦,是天一觀的道長晦款。 經(jīng)常有香客問我,道長顷锰,這世上最難降的妖魔是什么柬赐? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任亡问,我火速辦了婚禮官紫,結(jié)果婚禮上肛宋,老公的妹妹穿的比我還像新娘。我一直安慰自己束世,他們只是感情好酝陈,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毁涉,像睡著了一般沉帮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贫堰,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天穆壕,我揣著相機與錄音,去河邊找鬼其屏。 笑死喇勋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的偎行。 我是一名探鬼主播川背,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛤袒!你這毒婦竟也來了熄云?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妙真,失蹤者是張志新(化名)和其女友劉穎缴允,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珍德,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡癌椿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菱阵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踢俄。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晴及,靈堂內(nèi)的尸體忽然破棺而出都办,到底是詐尸還是另有隱情,我是刑警寧澤虑稼,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布琳钉,位于F島的核電站,受9級特大地震影響蛛倦,放射性物質(zhì)發(fā)生泄漏歌懒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一溯壶、第九天 我趴在偏房一處隱蔽的房頂上張望及皂。 院中可真熱鬧甫男,春花似錦、人聲如沸验烧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍拆。三九已至若治,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間感混,已是汗流浹背端幼。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弧满,地道東北人静暂。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像谱秽,于是被迫代替她去往敵國和親洽蛀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Eloquent: 關聯(lián)模型 簡介 數(shù)據(jù)庫中的表經(jīng)常性的關聯(lián)其它的表疟赊。比如郊供,一個博客文章可以有很多的評論,或者一個...
    Dearmadman閱讀 17,315評論 6 16
  • Eloquent: 起步 簡介 Laravel 的 Eloquent ORM 提供了一種漂亮簡潔的關系映射的模型來...
    Dearmadman閱讀 11,962評論 3 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理近哟,服務發(fā)現(xiàn)驮审,斷路器,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • 測試 簡介 測試是 Laravel 構(gòu)建的核心理念吉执。事實上疯淫,Laravel 開箱即用的支持 PHPUnit 測試,...
    Dearmadman閱讀 8,075評論 2 28
  • 閱讀進度:96頁 時間:2017.2.13 心得:今天是一個關于夢想與堅持的故事戳玫。一個很舊卻總會有新故事發(fā)生的話題...
    愛寫故事的女主播閱讀 245評論 0 0