作用:訪問器和修改器允許你在獲取模型屬性或設置其值時格式化 Eloquent 屬性。例如,你可能想要使用 Laravel 加密器對存儲在數據庫中的數據進行加密,並且在 Eloquent 模型中訪問時自動進行解密。
定義訪問器:
public function getFooAttribute($value){ //這里可以對 $value 做一些轉換等操作 return $vlaue; }
其中,Foo
代表對應的屬性,使用「駝峰式」命名。
定義修改器:
public function setFooAttribute($value) { $this->attributes['foo'] = strtolower($value); }
訪問器 & 修改器
定義訪問器
要定義一個訪問器,需要在模型中創建一個 getFooAttribute
方法,其中 Foo
是你想要訪問的字段名(使用駝峰式命名規則)。在本例中,我們將會為 first_name
屬性定義一個訪問器,該訪問器在獲取 first_name
的值時被 Eloquent 自動調用:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 獲取用戶的名字
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
正如你所看到的,該字段的原生值被傳遞給訪問器,然后返回處理過的值。要訪問該值只需要簡單訪問 first_name
即可:
$user = App\User::find(1);
$firstName = $user->first_name;
當然,你也可以使用訪問器將已存在的屬性轉化為全新的、經過處理的值:
/**
* 獲取用戶的全名
*
* @return string
*/
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
定義修改器
要定義一個修改器,需要在模型中定義 setFooAttribute
方法,其中 Foo
是你想要訪問的字段(使用駝峰式命名規則)。接下來讓我們為 first_name
屬性定義一個修改器,當我們為模型上的 first_name
賦值時該修改器會被自動調用:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 設置用戶的名字
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
該修改器獲取要被設置的屬性值,允許你操縱該值並設置 Eloquent 模型內部屬性值為操作后的值。例如,如果你嘗試設置 Sally
的 first_name
屬性:
$user = App\User::find(1);
$user->first_name = 'Sally';
在本例中,setFirstNameAttribute
方法會被調用,傳入參數為 Sally
,修改器會對其調用 strtolower
函數並將處理后的值設置為內部屬性的值。
鏈接:http://laravelacademy.org/post/8875.html