ThinkPHP5數(shù)據(jù)模型

1 獲得模型

先定義模型 User

User::get(1);
//獲得id=1的User

$user2=new User;
$user2::get(2);
//獲得id=2的User

$user3=Loader::model("User");
$user3::get(3)
//獲得id=3的User
//需要use think\Loader
//可以多個模型

$user4=model("User");
$user4::get(4)
//獲得id=4的User
//助手函數(shù),不需要use think\Loader

2 模型查詢

$user=User::get(1);
$user=$user->toArray();
//獲得id=1的User
//獲得數(shù)據(jù)

$data=User::get(function($query){
? ? ? ? $query->where("id","eq",1);
})
$data=$data->toArray();
//獲得數(shù)據(jù)

$data=User::where("id",10)
->field("id,name,age")
->find()
//鏈?zhǔn)讲僮?/p>

$data=User::all("1,2,3");
foreach($data as $val){
? ? dump($val->toArray());
}

3 模型添加

User::create([
'name'=>'smith',
'age'=>30,
'email'=>'smith@qq.com'
])

User::create([
'name'=>'smith',
'age'=>30,
'email'=>'smith@qq.com',
'book'=>'thinkphp'
],true)
//這里true可以防止插入不存在的book字段而報錯

$user=new User;
$user->name='Joy';
$user->age=24;
$user->save();

$user=new User;
$user->save([
'name'=>'robot',
'age'=>22
])

$user=new User;
$user
->allowField(true)//過濾不存在的數(shù)據(jù)字段
->save([
'name'=>'robot',
'age'=>22,
'book'=>'c#'
])

$user=new User;
$user
->allowField(['name'])//只插入name字段值,并且過濾不存在的數(shù)據(jù)字段
->save([
'name'=>'robot',
'age'=>22,
'book'=>'c#'
])

同樣還有
$user->saveAll($list)方法,插入多條數(shù)據(jù),可以僅僅部分字段,返回每個model

4 更新數(shù)據(jù)

User::update([
'id'=>1,
'name'=>'Gog'
])
//更新ID=1的數(shù)據(jù)

User::update([
'id'=>1,
'name'=>'BOOB'
],['id'=>2])
//更新ID=2的數(shù)據(jù)

User::update([
'id'=>1,
'name'=>'Higo'
],function($query){
? ? $query->where("id","=",5)
})
//更新ID=5的數(shù)據(jù)

User::where("id","=",6)
->update([
'name'=>'Clop'
])
//返回更新的行數(shù),如果同樣的代碼再次執(zhí)行,返回0

$user->User::get(1);
$user->name='Tom';
$user->save();
//返回更新的行數(shù),如果同樣的代碼再次執(zhí)行,返回0

$user->new User;
$user->save([
'name'='Jack'
],['id]=>9])
//返回更新的行數(shù),如果同樣的代碼再次執(zhí)行,返回0

$user->new User;
$user->save([
'name'='Jack'
],function($query){
$query->where('id','<','10');
})
//更新<10的

$user->new User;
$user->saveAll([
? ? ['id'=>1,'name'=>'Pick''],
? ? ['id'=>2,'name'=>'Tomas']
]);
//更新多個,刷新同樣執(zhí)行

5 刪除數(shù)據(jù)

User::destroy(1);
//返回刪除的行數(shù),如果同樣的代碼再次執(zhí)行,返回0

User::destroy(['id'=>1]);
//效果一樣

User::destroy(function($query){
? ? $query->where('id','<',5);
});
//刪除<5的所有user

$user=User::get(6);
$user->delete();

User::where('id',8)
->delete();

6 聚合操作

User::count();
統(tǒng)計數(shù)量

User::where('id','>',5)->count();
//統(tǒng)計

max()//取得最大值

min()//最小值

sum()//求和

avg()//平均值

7 模型顯示屬性格式化

在model代碼中:User.php,定義個性別獲取器
public function getSexAttr($val){
? ? switch($val){
? ? ? ? case '1':
? ? ? ? ? ? ? ? ? ? ?return '女';
? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ?case '2':
? ? ? ? ? ? ? ? ? ? ?return '男';
? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ?default:
? ? ? ? ? ? ? ? ? ? return '未設(shè)置';
? ? ? ? ? ? ? ? ? ? break;
? ? }
}

設(shè)置后,模型中性別欄自動顯示為 男 女 或 未設(shè)置

$data->User::get(1);
dump($data->toArray());
//這樣輸出的結(jié)果是格式化后的數(shù)據(jù)

如果希望還是顯示數(shù)字0,1,2使用的是:
$data->User::get(1);
dump($data->getData());

8 模型修改器

在model代碼中:User.php,定義個密碼修改器

public function setPasswordAttr($val){
? ? return md5($val);
}

這樣在插入操作的時候,不需要顯示在代碼中加密,它會自動修改;

特別的,如果這個方法有第二個參數(shù)。

/*
* ?User類密碼修改器
* @param $val 表示傳入的密碼值
* @param $data 表示傳入的整個model
*/
public function setPasswordAttr($val,$data){
// ? ?$data['age'] //得到年齡
}

9 模型自動完成

在model代碼中:User.php,定義個auto數(shù)組,里面填上需要自動完成的字段;

protected $auto=['time'];

再定義一個set方法

public function setTimeAttr()
{
? ? return time();
}

protected $insert=[];//只在插入有效

protected $update=[];//只在更新有效

10 模型時間戳

在model代碼中:User.php,有兩個字段create_time和update_time

protected $autoWriteTimestamp=true;

當(dāng)前模型的時間會自動填寫。

如果字段名稱不是這兩個則需要在模型中聲明,假設(shè)當(dāng)前字段名為create_on和update_on

則需要補充代碼如下

protected $createTime='create_on'; //這里填寫的是字段名,如果是填寫false,表示不開啟
protected $updateTime='update_on';

這樣就好了

11 軟刪除

在數(shù)據(jù)中添加字段delete_time,允許為null

①在模型中引入函數(shù)
use traits\model\SoftDelete;

②在模型體中
use SoftDelete;

③此時如果只選 User::destory(1),數(shù)據(jù)不直接刪除,而是記錄了deleteTime

④雖然數(shù)據(jù)不刪除,如果使用User::get(1),返回的是Null

⑤如果需要獲得軟刪除的數(shù)據(jù)需要User::withTrashed(true)->find(1);

⑥如果只想要軟刪除的數(shù)據(jù)User::onlyTrashed()->where();

同樣如果字段名稱不是delete_time,也是rotected $createTime='delete_on';的設(shè)置

如果設(shè)置了軟刪除,要真的刪除

方法①
User::destory(1,true) //直接刪除

方法②
$user=User::get(1);
$user->delete(true);

如果要去掉軟刪除標(biāo)志,則update 刪除字段的時間為null即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容