一.查詢構建器的get方法
查詢構建器的get方法返回了一個集合
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
二.訪問器&調整器
1.訪問器:為數據庫的某列在用屬性讀取的時候做處理
class User extends Model{
/**
* 獲取用戶的名字
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
調用
$user = App\User::find(1);
$firstName = $user->first_name;
2.調整器:為數據庫的某一列在更新的時候做處理
class User extends Model{
/**
* 設置用戶的名字
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
$user = App\User::find(1);
$user->first_name = 'Sally';
3.日期調整器
class User extends Model{
/**
* 應該被調整為日期的屬性
*
* @var array
*/
protected $dates = ['created_at', 'updated_at', 'disabled_at'];
...
}
如果字段是日期格式時,你可以將其值設置為 UNIX 時間戳,日期字符串( Y-m-d ),日期-時間字符串, Datetime/Carbon 實例,日期的值將會自動以正確格式存儲到數據庫中:
$user = App\User::find(1);
$user->disabled_at = Carbon::now();
$user->save();
正如上面提到的,當獲取被羅列在$dates 數組中的屬性時,它們會被自動轉化為Carbon 實例,允許你在屬性上使用任何Carbon 的方法:
$user = App\User::find(1);
return $user->disabled_at->getTimestamp();
如果你需要自定義時間戳格式,在模型中設置$dateFormat 屬性,該屬性決定日期屬性將以何種格式存儲在數據庫中、以及序列化為數組或 JSON 時的格式
class Flight extends Model{
/**
* 模型日期的存儲格式
*
* @var string
*/
protected $dateFormat = 'U';
}
三.屬性轉換
1.在訪問時將某列轉為另一種類型:
class User extends Model{
/**
* 應該被轉化為原生類型的屬性
*
* @var array
*/
protected $casts = [
'is_admin' => 'boolean', //訪問is_admin字段的值時,將其轉為boolean值
];
}
2.數組轉換
array 類型轉換在處理被存儲為序列化 JSON 的字段是特別有用,例如,如果數據庫有一個 TEXT 字段類型包含了序列化 JSON,添加array 類型轉換到該屬性將會在 Eloquent 模型中訪問其值時自動將其反序列化為 PHP數組:
class User extends Model{
/**
* 應該被轉化為原生類型的屬性
*
* @var array
*/
protected $casts = [
'options' => 'array',
];
}
array 類型轉換在處理被存儲為序列化 JSON 的字段是特別有用,例如,如果數據庫有一個 TEXT 字段類型包含
了序列化 JSON,添加array 類型轉換到該屬性將會在 Eloquent 模型中訪問其值時自動將其反序列化為 PHP
數組:
$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();
五.序列化
1.轉化模型/集合為數組
$user = App\User::with('roles')->first();
return $user->toArray();
$users = App\User::all();
return $users->toArray();
2.轉化模型為 JSON
$user = App\User::find(1);
return $user->toJson();
3.轉為字符串
$user = App\User::find(1);
return (string) $user;
轉換后的格式如下:
{"id":1,"user_id":1,"name":"\u6700\u65b0\u6d4b\u8bd5","created_at":"2017-05-28 18:44:37","updated_at":"2017-05-31 23:37:55"}
4.隱藏屬性顯示
class User extends Model{
/**
* 在數組中隱藏的屬性
*
* @var array
*/
protected $hidden = ['password'];
}
5.顯示屬性
class User extends Model{
/**
* 在數組中顯示的屬性
*
* @var array
*/
protected $visible = ['first_name', 'last_name'];
}
6.追加值到數組
class User extends Model{
/**
* 為用戶獲取管理員標識
*
* @return bool
*/
public function getIsAdminAttribute()
{
return $this->attributes['admin'] == 'yes';
}
}
這將在原有的列上添加一列is_admin,這需要通過屬性訪問時才會獲得,如果我們希望在獲得數據的時候被一起返回,則還需要append屬性
class User extends Model{
protected $appends = ['is_admin'];
/**
* 為用戶獲取管理員標識
*
* @return bool
*/
public function getIsAdminAttribute()
{
return $this->attributes['admin'] == 'yes';
}
}