支持給(gei)字段(duan)設置類型(xing)自動(dong)轉換(huan),會在寫入和讀取的時(shi)候自動(dong)進行(xing)類型(xing)轉換(huan)處理,例(li)如:

class User extends Model 
{
    protected $type = [
        'status'    =>  'integer',
        'score'     =>  'float',
        'birthday'  =>  'datetime',
        'info'      =>  'array',
    ];
}

下(xia)面是(shi)一個類(lei)型自動轉換的示例(li):

$user = new User;
$user->status = '1';
$user->score = '90.50';
$user->birthday = '2015/5/1';
$user->info = ['a'=>1,'b'=>2];
$user->save();
var_dump($user->status); // int 1
var_dump($user->score); // float 90.5;
var_dump($user->birthday); // string '2015-05-01 00:00:00'
var_dump($user->info);// array (size=2) 'a' => int 1  'b' => int 2

數(shu)據庫查詢默認取出來的數(shu)據都是字符串類(lei)型(xing),如果(guo)需(xu)(xu)要(yao)轉換為(wei)其他的類(lei)型(xing),需(xu)(xu)要(yao)設(she)置,支持(chi)的類(lei)型(xing)包括(kuo)如下(xia)類(lei)型(xing):

integer

設置為integer(整型(xing))后,該字(zi)段(duan)寫入(ru)和輸出的(de)時候(hou)都會自動(dong)轉換為整型(xing)。

float

該字段的值寫入和輸出的時候(hou)自動轉換(huan)為浮點型。

boolean

該字(zi)段的(de)值寫入(ru)和輸出的(de)時候自(zi)動轉換為布爾型(xing)。

array

如果設置為強制轉換為array類型,系統會自(zi)動把(ba)數(shu)組編碼為(wei)json格式字符串寫入數(shu)據(ju)庫,取(qu)出來的時候會自(zi)動解碼。

object

該字段的值在寫入的時候會自動編碼為json字符串,輸出的時候會自動轉換為stdclass對象。

serialize

指(zhi)定為(wei)序(xu)列(lie)化類(lei)型的話,數(shu)據會自動序(xu)列(lie)化寫(xie)入,并(bing)且在讀取的時候自動反序(xu)列(lie)化。

json

指定為json類型的話,數據會自動json_encode寫入,并且在讀取的時候自動json_decode處理。

timestamp

指定為時間戳字段類型的話,該字段的值在寫入時候會自動使用strtotime生成對應的時間戳,輸出的時候會自動轉換為dateFormat屬性定義的時間字符串格式,默認的格式為Y-m-d H:i:s,如(ru)果(guo)希望改(gai)變其他格式,可以(yi)定義如(ru)下:

class User extends Model 
{
    protected $dateFormat = 'Y/m/d';
    protected $type = [
        'status'    =>  'integer',
        'score'     =>  'float',
        'birthday'  =>  'timestamp',
    ];
}

或者在類型轉換定(ding)義的時候使(shi)用:

class User extends Model 
{
    protected $type = [
        'status'    =>  'integer',
        'score'     =>  'float',
        'birthday'  =>  'timestamp:Y/m/d',
    ];
}

然后就可(ke)以

$user = User::find(1);
echo $user->birthday; // 2015/5/1

datetime

timestamp類似,區別在于寫入和讀取數據的時候都會自動處理成時間字符串Y-m-d H:i:s的格式。