當(dāng)構(gòu)建JSON中。
要轉(zhuǎn)化模型及其加載的關(guān)聯(lián)關(guān)系為數(shù)組,可以使用toArray
方法。這個(gè)方法是遞歸的,所以所有屬性及其關(guān)聯(lián)對(duì)象屬性(包括關(guān)聯(lián)的關(guān)聯(lián))都會(huì)被轉(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
方法,和toArray
一樣,toJson
方法也是遞歸的,所有屬性及其關(guān)聯(lián)屬性都會(huì)被轉(zhuǎn)化為JSON:
$user = App\User::find(1);
return $user->toJson();
你還可以轉(zhuǎn)化模型或集合為字符串,這將會(huì)自動(dòng)調(diào)用toJson
方法:
$user = App\User::find(1);
return (string) $user;
由于模型和集合在轉(zhuǎn)化為字符串的時(shí)候會(huì)被轉(zhuǎn)化為JSON,你可以從應(yīng)用的路由或控制器中直接返回Eloquent對(duì)象:
Route::get('users', function () {
return App\User::all();
});
有時(shí)候你希望在模型數(shù)組或JSON顯示中限制某些屬性,比如密碼,要實(shí)現(xiàn)這個(gè),在定義模型的時(shí)候添加一個(gè)$hidden
屬性:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 在數(shù)組中隱藏的屬性
*
* @var array
*/
protected $hidden = ['password'];
}
注意:如果要隱藏關(guān)聯(lián)關(guān)系,使用關(guān)聯(lián)關(guān)系的方法名,而不是動(dòng)態(tài)屬性名。
此外,可以使用visible
屬性定義屬性顯示的白名單:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 在數(shù)組中顯示的屬性
*
* @var array
*/
protected $visible = ['first_name', 'last_name'];
}
有時(shí)候,需要添加數(shù)據(jù)庫(kù)中沒(méi)有相應(yīng)的字段到數(shù)組中,要實(shí)現(xiàn)這個(gè),首先要定義一個(gè)訪問(wèn)器:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 為用戶獲取管理員標(biāo)識(shí)
*
* @return bool
*/
public function getIsAdminAttribute()
{
return $this->attributes['admin'] == 'yes';
}
}
定義好訪問(wèn)器后,添加字段名到模型的appends
屬性:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 追加到模型數(shù)組表單的訪問(wèn)器
*
* @var array
*/
protected $appends = ['is_admin'];
}
字段被添加到appends
列表之后,將會(huì)被包含到模型數(shù)組和JSON表單中,appends
數(shù)組中的字段還會(huì)遵循模型中的visible
和hidden
設(shè)置配置。
更多建議: