支持給字段設置類型自動轉換,會在寫入和讀取的時候自動進行類型轉換處理,例如:
class User extends Model
{
protected $type = [
'status' => 'integer',
'score' => 'float',
'birthday' => 'datetime',
'info' => 'array',
];
}
下面是一個類型自動轉換的示例:
$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
數據庫查詢默認取出來的數據都是字符串類型,如果需要轉換為其他的類型,需要設置,支持的類型包括如下類型:
integer
設置為integer(整型)后,該字段寫入和輸出的時候都會自動轉換為整型。
float
該字段的值寫入和輸出的時候自動轉換為浮點型。
boolean
該字段的值寫入和輸出的時候自動轉換為布爾型。
array
如果設置為強制轉換為array
類型,系統會自動把數組編碼為json格式字符串寫入數據庫,取出來的時候會自動解碼。
object
該字段的值在寫入的時候會自動編碼為json字符串,輸出的時候會自動轉換為stdclass
對象。
serialize
指定為序列化類型的話,數據會自動序列化寫入,并且在讀取的時候自動反序列化。
json
指定為json
類型的話,數據會自動json_encode
寫入,并且在讀取的時候自動json_decode
處理。
timestamp
指定為時間戳字段類型的話,該字段的值在寫入時候會自動使用strtotime
生成對應的時間戳,輸出的時候會自動轉換為dateFormat
屬性定義的時間字符串格式,默認的格式為Y-m-d H:i:s
,如果希望改變其他格式,可以定義如下:
class User extends Model
{
protected $dateFormat = 'Y/m/d';
protected $type = [
'status' => 'integer',
'score' => 'float',
'birthday' => 'timestamp',
];
}
或者在類型轉換定義的時候使用:
class User extends Model
{
protected $type = [
'status' => 'integer',
'score' => 'float',
'birthday' => 'timestamp:Y/m/d',
];
}
然后就可以
$user = User::find(1);
echo $user->birthday; // 2015/5/1
datetime
和timestamp
類似,區別在于寫入和讀取數據的時候都會自動處理成時間字符串Y-m-d H:i:s
的格式。