《PHP實例:laravel學習教程之存取器》要點:
本文介紹了PHP實例:laravel學習教程之存取器,希望對您有用。如果有疑問,可以聯(lián)系我們。
前言PHP教程
Laravel是一個簡單優(yōu)雅的PHP Web開發(fā)框架,可以將開發(fā)者從意大利面條式的代碼中解放出來,通過簡單、高雅、表達式語法開發(fā)出很棒的Web應用,那下面跟著小編一起來學習laravel中的存取器吧.PHP教程
Eloquent: 存取器簡介PHP教程
訪問器和存儲器允許你在獲取或者設置 Eloquent 模型屬性值時對其進行格式化操作.比如,你可能希望當一個值存儲進數(shù)據(jù)庫之前先對其進行 Laravel encrypter 進行加密操作,并且可以在你通過模型訪問的時候自動的進行該屬性的解密.PHP教程
除了可自定義的的訪問器和存儲器,Eloquent 也可以自動的將日期字段轉換為 Carbon 實例,或者甚至是將字符串字段轉換為 JSON.PHP教程
訪問器 & 存取器
PHP教程
定義一個訪問器PHP教程
為了定義一個訪問器,你需要在你的模型上創(chuàng)建一個 getFooAttribute
方法,其中的 Foo
是你需要進行訪問的列名的駝峰方式的命名.在這個例子中,我們將定義一個 first_name
屬性的訪問器.這個訪問器會在 Eloquent 嘗試獲取 first_name
屬性值時觸發(fā):PHP教程
<?php namespace 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
屬性就可以從存取器中訪問該值:PHP教程
$user = App\User::find(1); $firstName = $user->first_name;
定義一個存儲器PHP教程
為了定義一個存儲器,你需要在你的模型上定義一個 setFooAttribute
方法,其中的 Foo
是你期望訪問的列的駝峰樣式的名稱.那么,這一次,讓我們?yōu)?first_name
屬性定義一個存儲器.這個存儲器會在模型嘗試設置 first_name
屬性的值時進行調用:PHP教程
<?php namespace 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
:PHP教程
$user = App\User::find(1); $user->first_name = 'Sally';
在這個例子中,setFirstNameAttribute
方法會被調用并伴隨 Sally
值.存儲器會應用 strtolower
方法將名字小寫化然后將值設置到內部的 $attributes
數(shù)組中.PHP教程
日期存取器
PHP教程
默認的,Eloquent
會轉換 created_at
和 updated_at
列為 Carbon
實例,這個實例可以提供多種有用的方法,并且它繼承自原生 PHP 的 DataTime
類.PHP教程
你可以自定義哪些字段可以進行自動的轉換,甚至是完全禁用這種轉換,你需要在你的模型中復寫 $dates
屬性:PHP教程
<?php namespace 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
實例,并且日期的值會自動的正確的存儲到數(shù)據(jù)庫中:PHP教程
$user = App\User::find(1); $user->deleted_at = Carbon::now(); $user->save();
就如上面所述,當獲取的屬性是 $dates
屬性所列出的值之一時,它會自動的被轉換為 Carbon
實例,這允許你在屬性上使用 Carbon
的一些方法:PHP教程
$user = App\User::find(1); return $user->deleted_at->getTimestamp();
默認的,時間戳被格式化為 Y-m-d H:i:s
的格式.如果你希望自定義時間戳的格式,你需要在你的模型中設置 $dateFormat
屬性.該屬性將確定日期屬性將如何存儲到數(shù)據(jù)庫中以及當模型進行序列化或者 JSON
化時如何展示:PHP教程
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; }
屬性轉換
PHP教程
你可以在你的模型中定義 $casts
屬性來提供一種方便的方式將屬性轉換為通用的數(shù)據(jù)類型.$casts
屬性應該是一個數(shù)組,并且其每一項的鍵應該是需要進行轉換的屬性名,而其鍵所對應的值應該是你需要屬性轉換到的類型.支持的轉換類型有:integer
,real
,float
,double
,string
,boolean
,object
,array
,coolection
,date
,datetime
,和 timestamp
.PHP教程
比如,讓我們轉換 is_admin
屬性,它在數(shù)據(jù)庫中存儲的值為一個整型(0 或者 1),我們將其轉換為布爾值:PHP教程
<?php namespace 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', ]; }
現(xiàn)在,每當你訪問 is_admin
屬性時,其值都會被轉換為布爾值,即使其在數(shù)據(jù)庫中存儲的整型值:PHP教程
$user = App\User::find(1); if ($user->is_admin) { // }
數(shù)組轉換PHP教程
array
轉換的類型對于存儲序列化 JSON 值的列尤其有用.比如,如果數(shù)據(jù)庫有一個 TEXT 類型的字段,并且其存儲的是序列化的 JSON,如果你添加該屬性的 array
轉換,那么當你在 Eloquent 模型上訪問這個屬性時,它將會自動的進行反序列化為 PHP 的數(shù)組:PHP教程
<?php namespace 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 數(shù)組.當你設置值到 options
屬性時,所給定的數(shù)組會自動的序列化為 JSON 格式,然后進行存儲:PHP教程
$user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user->options = $options; $user->save();
以上就是小編為大家整理的laravel學習教程之存取器的全部內容,有需要的小伙伴們可以參考學習,小編陸續(xù)還會更新laravel相關的知識,請大家繼續(xù)關注維易PHP.PHP教程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5048.html