国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

laravel學習教程之存取器

2024-05-04 23:48:57
字體:
來源:轉載
供稿:網友

前言

Laravel是一個簡單優雅的PHP Web開發框架,可以將開發者從意大利面條式的代碼中解放出來,通過簡單、高雅、表達式語法開發出很棒的Web應用,那下面跟著小編一起來學習laravel中的存取器吧。

Eloquent: 存取器簡介

訪問器和存儲器允許你在獲取或者設置 Eloquent 模型屬性值時對其進行格式化操作。比如,你可能希望當一個值存儲進數據庫之前先對其進行 Laravel encrypter 進行加密操作,并且可以在你通過模型訪問的時候自動的進行該屬性的解密。

除了可自定義的的訪問器和存儲器,Eloquent 也可以自動的將日期字段轉換為 Carbon 實例,或者甚至是將字符串字段轉換為 JSON

訪問器 & 存取器

定義一個訪問器

為了定義一個訪問器,你需要在你的模型上創建一個 getFooAttribute 方法,其中的 Foo 是你需要進行訪問的列名的駝峰方式的命名。在這個例子中,我們將定義一個 first_name 屬性的訪問器。這個訪問器會在 Eloquent 嘗試獲取 first_name 屬性值時觸發:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * Get the user's first name.  *  * @param string $value  * @return string  */ public function getFirstNameAttribute($value) {  return ucfirst($value); }}

就如你所看到的,屬性原始的值會被傳遞到訪問器中,這允許你對原始值進行操作及返回格式化后的值。你只需要簡單的訪問 first_name 屬性就可以從存取器中訪問該值:

$user = App/User::find(1);$firstName = $user->first_name;

定義一個存儲器

為了定義一個存儲器,你需要在你的模型上定義一個 setFooAttribute 方法,其中的 Foo 是你期望訪問的列的駝峰樣式的名稱。那么,這一次,讓我們為 first_name 屬性定義一個存儲器。這個存儲器會在模型嘗試設置 first_name 屬性的值時進行調用:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * Set the user's first name.  *  * @param string $value  * @return string  */ public function setFirstNameAttribute($value) {  $this->attributes['first_name'] = strtolower($value); }}

存儲器會接收即將設置到屬性中的值,這允許你對這個值進行操作,并將其設置到模型內部的 $attributes 屬性中。所以,舉個示例,如果我們嘗試將 first_name 屬性設置為 Sally:

$user = App/User::find(1);$user->first_name = 'Sally';


在這個例子中,setFirstNameAttribute 方法會被調用并伴隨 Sally 值。存儲器會應用 strtolower 方法將名字小寫化然后將值設置到內部的 $attributes 數組中。

日期存取器

默認的,Eloquent 會轉換 created_at updated_at 列為 Carbon 實例,這個實例可以提供多種有用的方法,并且它繼承自原生 PHP 的 DataTime 類。

你可以自定義哪些字段可以進行自動的轉換,甚至是完全禁用這種轉換,你需要在你的模型中復寫 $dates 屬性:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * The attributes that should be mutated to dates  *  * @var array  */ protected $dates = ['created_at', 'updated_at', 'deleted_at'];}

當一列被認為是日期時,你可以將其設置為 UNIX 時間戳,日期字符串(Y-m-d),時間字符串,和 DateTime / Carbon 實例,并且日期的值會自動的正確的存儲到數據庫中:

$user = App/User::find(1);$user->deleted_at = Carbon::now();$user->save();

就如上面所述,當獲取的屬性是 $dates 屬性所列出的值之一時,它會自動的被轉換為 Carbon 實例,這允許你在屬性上使用 Carbon 的一些方法:

$user = App/User::find(1);return $user->deleted_at->getTimestamp();


默認的,時間戳被格式化為 Y-m-d H:i:s 的格式。如果你希望自定義時間戳的格式,你需要在你的模型中設置 $dateFormat 屬性。該屬性將確定日期屬性將如何存儲到數據庫中以及當模型進行序列化或者 JSON 化時如何展示:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class Flight extends Model{ /**  * The storage format of the model's date columns.  *  * @var string  */ protected $dateFormat = 'U';}

屬性轉換

你可以在你的模型中定義 $casts 屬性來提供一種方便的方式將屬性轉換為通用的數據類型。$casts 屬性應該是一個數組,并且其每一項的鍵應該是需要進行轉換的屬性名,而其鍵所對應的值應該是你需要屬性轉換到的類型。支持的轉換類型有:integerrealfloatdoublestringbooleanobjectarraycoolectiondatedatetime,和 timestamp

比如,讓我們轉換 is_admin 屬性,它在數據庫中存儲的值為一個整型(0 或者 1),我們將其轉換為布爾值:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * The attributes that should be casted to native types.  *  * @var array  */ protected $casts = [  'is_admin' => 'boolean', ];}

現在,每當你訪問 is_admin 屬性時,其值都會被轉換為布爾值,即使其在數據庫中存儲的整型值:

$user = App/User::find(1);if ($user->is_admin) { //}

數組轉換

array 轉換的類型對于存儲序列化 JSON 值的列尤其有用。比如,如果數據庫有一個 TEXT 類型的字段,并且其存儲的是序列化的 JSON,如果你添加該屬性的 array 轉換,那么當你在 Eloquent 模型上訪問這個屬性時,它將會自動的進行反序列化為 PHP 的數組:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * The attributes that should be casted to native types.  *  * @var array  */ protected $casts = [  'options' => 'array' ];}

當你轉義定義完成之后,你可以訪問 options 屬性,并且它會自動的被從 JSON 反序列化為 PHP 數組。當你設置值到 options 屬性時,所給定的數組會自動的序列化為 JSON 格式,然后進行存儲:

$user = App/User::find(1);$options = $user->options;$options['key'] = 'value';$user->options = $options;$user->save();

以上就是小編為大家整理的laravel學習教程之存取器的全部內容,有需要的小伙伴們可以參考學習,小編陸續還會更新laravel相關的知識,請大家繼續關注VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 长沙县| 凉城县| 宝清县| 山丹县| 若羌县| 浪卡子县| 奉节县| 漯河市| 芷江| 南汇区| 水富县| 武胜县| 奉化市| 北碚区| 长垣县| 徐汇区| 长治县| 保靖县| 连南| 平度市| 大港区| 桐梓县| 香港| 平潭县| 江川县| 新民市| 广德县| 汶上县| 惠州市| 淮安市| 米脂县| 普洱| 哈密市| 洛川县| 新龙县| 鄂托克前旗| 晴隆县| 丰顺县| 都江堰市| 延川县| 蒙山县|