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字段而報(bào)錯

$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)計(jì)數(shù)量

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

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í)候王污,不需要顯示在代碼中加密,它會自動修改楚午;

特別的昭齐,如果這個方法有第二個參數(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 模型時(shí)間戳

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

protected $autoWriteTimestamp=true;

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

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

則需要補(bǔ)充代碼如下

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

這樣就好了

11 軟刪除

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

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

②在模型體中
use SoftDelete;

③此時(shí)如果只選 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 刪除字段的時(shí)間為null即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咖城,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呼奢,更是在濱河造成了極大的恐慌宜雀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件握础,死亡現(xiàn)場離奇詭異辐董,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)禀综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門简烘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人定枷,你說我怎么就攤上這事孤澎。” “怎么了欠窒?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵覆旭,是天一觀的道長。 經(jīng)常有香客問我,道長型将,這世上最難降的妖魔是什么寂祥? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮七兜,結(jié)果婚禮上丸凭,老公的妹妹穿的比我還像新娘。我一直安慰自己腕铸,他們只是感情好惜犀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狠裹,像睡著了一般向拆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酪耳,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音刹缝,去河邊找鬼碗暗。 笑死,一個胖子當(dāng)著我的面吹牛梢夯,可吹牛的內(nèi)容都是我干的言疗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颂砸,長吁一口氣:“原來是場噩夢啊……” “哼噪奄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起人乓,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勤篮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后色罚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碰缔,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年戳护,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了金抡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡腌且,死狀恐怖梗肝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铺董,我是刑警寧澤巫击,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響喘鸟,放射性物質(zhì)發(fā)生泄漏匆绣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一什黑、第九天 我趴在偏房一處隱蔽的房頂上張望崎淳。 院中可真熱鬧,春花似錦愕把、人聲如沸拣凹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚣镜。三九已至,卻和暖如春橘蜜,著一層夾襖步出監(jiān)牢的瞬間菊匿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工计福, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跌捆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓象颖,卻偏偏與公主長得像佩厚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子说订,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容