一個(gè)標(biāo)準(zhǔn)的網(wǎng)站一定離不開數(shù)據(jù)庫的操作,在本套課程中我和你一起來揭開ThinkPHP5 數(shù)據(jù)操作的神秘面紗,和你一起愉快的使用 ThinkPHP5 操作數(shù)據(jù)庫,讓數(shù)據(jù)庫操作變的更愉悅。
基本使用
查詢操作
Db::query('select * from think_user where id=?',[8]);
寫入操作
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
查詢構(gòu)造器
查詢數(shù)據(jù)
find 返回一條記錄,返回的結(jié)果是一個(gè)一維數(shù)組 如果結(jié)果不存在,返回NULL
Db::table('think_user')->where('id',1)->find();
select 返回所有記錄,返回的結(jié)果是一個(gè)二維數(shù)組 如果結(jié)果不存在,返回一個(gè)空數(shù)組
Db::table('think_user')->where('status',1)->select();
助手函數(shù)
系統(tǒng)提供了一個(gè)db助手函數(shù),可以更方便的查詢:
db('user')->where('id',1)->find(); db('user')->where('status',1)->select();
注意:使用db助手函數(shù)默認(rèn)每次都會重新連接數(shù)據(jù)庫,而使用Db::name或者Db::table方法的話都是單例的。db函數(shù)如果需要采用相同的鏈接,可以傳入第三個(gè)參數(shù),例如
db('user',[],false)->where('id',1)->find(); db('user',[],false)->where('status',1)->select();
添加數(shù)據(jù)
使用 Db 類的 insert 方法向數(shù)據(jù)庫提交數(shù)據(jù)
$data = ['foo' => 'bar', 'bar' => 'foo']; Db::table('think_user')->insert($data);
添加多條數(shù)據(jù)
添加多條數(shù)據(jù)直接向 Db 類的 insertAll 方法傳入需要添加的數(shù)據(jù)即可
$data = [ ['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ]; Db::name('user')->insertAll($data);
insertAll 方法添加數(shù)據(jù)成功返回添加成功的條數(shù)
助手函數(shù)
// 添加單條數(shù)據(jù) db('user')->insert($data); // 添加多條數(shù)據(jù) db('user')->insertAll($list);
更新數(shù)據(jù)
update 方法返回影響數(shù)據(jù)的條數(shù),沒修改任何數(shù)據(jù)返回 0
Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']);
更新某個(gè)字段的值: setField 方法返回影響數(shù)據(jù)的條數(shù),沒修改任何數(shù)據(jù)字段返回 0
Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');
自增或自減一個(gè)字段的值
// score 字段加 1 Db::table('think_user')->where('id', 1)->setInc('score'); // score 字段加 5 Db::table('think_user')->where('id', 1)->setInc('score', 5); // score 字段減 1 Db::table('think_user')->where('id', 1)->setDec('score'); // score 字段減 5 Db::table('think_user')->where('id', 1)->setDec('score', 5);
延遲更新
Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
刪除數(shù)據(jù)
// 根據(jù)主鍵刪除 Db::table('think_user')->delete(1); Db::table('think_user')->delete([1,2,3]); // 條件刪除 Db::table('think_user')->where('id',1)->delete(); Db::table('think_user')->where('id','<',10)->delete();
條件查詢方法
where
可以使用where方法進(jìn)行AND條件查詢:
Db::table('think_user') ->where('name','like','%thinkphp') ->where('status',1) ->find();
whereOr方法
Db::table('think_user') ->where('name','like','%thinkphp') ->whereOr('title','like','%thinkphp') ->find();
混合查詢
where方法和whereOr方法在復(fù)雜的查詢條件中經(jīng)常需要配合一起混合使用,下面舉個(gè)例子:
$result = Db::table('think_user')->where(function ($query) { $query->where('id', 1)->whereor('id', 2); })->whereOr(function ($query) { $query->where('name', 'like', 'think')->whereOr('name', 'like', 'thinkphp'); })->select();
查詢表達(dá)式
查詢表達(dá)式支持大部分的SQL查詢語法,也是ThinkPHP查詢語言的精髓,查詢表達(dá)式的使用格式:
where('字段名','表達(dá)式','查詢條件'); whereOr('字段名','表達(dá)式','查詢條件');
表達(dá)式 含義
EQ、= 等于(=)
NEQ、<> 不等于(<>)
GT、> 大于(>)
EGT、>= 大于等于(>=)
LT、< 小于(<)
ELT、<= 小于等于(<=)
LIKE 模糊查詢
[NOT] BETWEEN (不在)區(qū)間查詢
[NOT] IN (不在)IN 查詢
[NOT] NULL 查詢字段是否(不)是NULL
[NOT] EXISTS EXISTS查詢
EXP 表達(dá)式查詢,支持SQL語法
> time 時(shí)間比較
< time 時(shí)間比較
between time 時(shí)間比較
notbetween time 時(shí)間比較