1.連接數(shù)據(jù)表
name方式
用處:簡化數(shù)據(jù)表前綴的傳入,例如:
Db::name('inquiry');
會自動獲取當前模型對應(yīng)的數(shù)據(jù)表前綴來生成 inquiry 數(shù)據(jù)表名稱。
注意:本文章的數(shù)據(jù)表沒有前綴,有前綴的就會自動獲取 前綴_inquiry數(shù)據(jù)表
table方式
用法:
切換操作的數(shù)據(jù)表;
table方法指定的數(shù)據(jù)表需要完整的表名
Db::table('inquiry');
指定數(shù)據(jù)庫:
Db::table('db_name.inquiry');
對多表進行操作;
Db::table('inquiry i,inquiry_company c')
->field('i.id,c.iq_id')
->limit(10)->select();
注意:多表查詢,并非聯(lián)合查詢
Sql:
SELECT `i`.`id`,`c`.`iq_id` FROM `inquiry` `i`,`inquiry_company` `c` LIMIT 10
2.查看執(zhí)行sql
echo Db::table('inquiry')->fetchSql(true)->find(1);
3.查詢單條數(shù)據(jù)
Db::name('inquiry')->where('brand', 10)->where('category', 42)->find()
Sql:
SELECT * FROM `inquiry` WHERE `brand` = 10 AND `category` = 42 LIMIT 1
返回結(jié)果:
Array
(
[id] => 1
[uid] => 11
[company_id] => 5
[content] => 690164-B21 P220I raid卡 數(shù)量1
[fileurl] =>
[brand] => 10
[category] => 42
[num] => 1
[signup_num] => 0
[arrival_time] => 1614096000
[addtime] => 1614145474
[invoice_type] =>
[appoint_company] =>
[is_expire] => 1
)
4.查詢數(shù)據(jù)集
Db::name('inquiry')->where('brand', 10)->where('category', 42)->select()->toArray();
需要toArray()方法把返回數(shù)據(jù)對象轉(zhuǎn)化為數(shù)組。
Sql:
SELECT * FROM `inquiry` WHERE `brand` = 10 AND `category` = 42
返回結(jié)果:
Array
(
[0] => Array
(
[id] => 1
[uid] => 11
[company_id] => 5
[content] => 690164-B21 P220I raid卡 數(shù)量1
[fileurl] =>
[brand] => 10
[category] => 42
[num] => 1
[signup_num] => 0
[arrival_time] => 1614096000
[addtime] => 1614145474
[invoice_type] =>
[appoint_company] =>
[is_expire] => 1
)
[1] => Array
(
[id] => 149
[uid] => 10
[company_id] => 4
[content] => 615732-B21 HP Ethernet 1Gb 2-port 332T 網(wǎng)卡
[fileurl] =>
[brand] => 10
[category] => 42
[num] => 5
[signup_num] => 0
[arrival_time] => 1616515200
[addtime] => 1616562900
[invoice_type] =>
[appoint_company] =>
[is_expire] => 1
)
)
5.設(shè)置返回字段 field
一般我們在項目中查詢時,不會直接獲取所有字段,都是按需獲取指定部分字段,這也是一種數(shù)據(jù)查詢優(yōu)化方式。而TP中獲取部分字段,并不是直接在find([‘id’, ‘brand’, ‘category’]) 或者 select([‘id’, ‘brand’, ‘category’]) 這樣做了,只會得到NULL 或者 array(),需要一個新的方法:
Db::name('inquiry')->field(['id', 'brand', 'category'])->find();
Db::name('inquiry')->field(['id', 'brand', 'category'])->select()->toArray();
6.排序order
Db::name('inquiry')
->field(['id', 'brand', 'category'])
->order('id','desc')->find();
Db::name('inquiry')
->field(['id','brand','category'])
->order('id','desc')
->select()->toArray();
7.列查詢
查詢某一列的值可以用.
Db::name('app_service')->where('id', '>', 1)->column('name');
返回結(jié)果:
Array
(
[0] => 新增數(shù)據(jù)
[1] => 新增數(shù)據(jù)
[2] => 新增數(shù)據(jù)
[3] => 新增數(shù)據(jù)
[4] => 新增數(shù)據(jù)
[5] => 新增數(shù)據(jù)
[6] => 新增數(shù)據(jù)
[7] => 新增數(shù)據(jù)
[8] => 新增數(shù)據(jù)
)
Id作key
Db::name('app_service')->where('id', '>', 1)->column('name', 'id');
返回結(jié)果:
Array
(
[2] => 新增數(shù)據(jù)
[3] => 新增數(shù)據(jù)
[4] => 新增數(shù)據(jù)
[5] => 新增數(shù)據(jù)
[6] => 新增數(shù)據(jù)
[7] => 新增數(shù)據(jù)
[8] => 新增數(shù)據(jù)
[9] => 新增數(shù)據(jù)
[10] => 新增數(shù)據(jù)
)
8.值查詢
查詢某個字段的值可以用。
Db::name('app_service')->where('id', 1)->value('name');
返回結(jié)果:
新增數(shù)據(jù)
9.新增單條數(shù)據(jù)
save
自動判斷是新增還是更新數(shù)據(jù)(以寫入數(shù)據(jù)中是否存在主鍵數(shù)據(jù)為依據(jù))。
Db::name('app_service')->save([
'name' => '新增數(shù)據(jù)',
'state' => 1,
'reason' => '測試新增數(shù)據(jù)',
'addtime' =>time(),
]);
insert
Db::name('app_service')->insert([
'name' => '新增數(shù)據(jù)',
'state' => 1,
'reason' => '測試新增數(shù)據(jù)',
'addtime' =>time(),
]);
Sql:
INSERT INTO `app_service` SET `name` = '新增數(shù)據(jù)' , `state` = 1 , `reason` = '測試新增數(shù)據(jù)' , `addtime` = 1673242525
返回結(jié)果:
成功:返回添加成功的條數(shù);失?。簰伋霎惓?/p>
insertGetId
Db::name('app_service')->insertGetId([
'name' => '新增數(shù)據(jù)',
'state' => 1,
'reason' => '測試新增數(shù)據(jù)',
'addtime' =>time(),
]);
Sql:同save、insert
返回結(jié)果:
返回新增數(shù)據(jù)的自增主鍵
10.新增批量數(shù)據(jù)
確保字段一致
$data = [
[
'name' => '新增數(shù)據(jù)-批量1',
'state' => 1,
'reason' => '測試新增數(shù)據(jù)',
'addtime' =>time(),
],
[
'name' => '新增數(shù)據(jù)-批量2',
'state' => 1,
'reason' => '測試新增數(shù)據(jù)',
'addtime' =>time(),
]
];
$info1 = Db::name('app_service')->fetchSql(true)->insertAll($data);
Sql:
INSERT INTO `app_service` (`name` , `state` , `reason` , `addtime`) VALUES ( '新增數(shù)據(jù)-批量1',1,'測試新增數(shù)據(jù)',1673242931 ) , ( '新增數(shù)據(jù)-批量2',1,'測試新增數(shù)據(jù)',1673242931 )
返回結(jié)果:
是2,為成功添加條數(shù);錯誤,則拋出異常。
11.更新數(shù)據(jù)
save
根據(jù)自增id,去識別更新
Db::name('app_service')->save(['id' => 18, 'name' => '編輯數(shù)據(jù)-測試']);
update
Db::name('app_service')->where('id', 18)->update(['name' => '編輯數(shù)據(jù)-測試']);
Sql:
UPDATE `app_service` SET `name` = '編輯數(shù)據(jù)-測試3' WHERE `id` = 18
返回結(jié)果:
返回修改影響條數(shù)
12.Raw更新
Db::name('app_service')
->where('id', 18)
->update([
'name' => '數(shù)據(jù)raw操作',
'state' => Db::raw('state-1'),
'addtime' => Db::raw('addtime+3')
]);
13.自增/自減
可以使用inc/dec方法自增或自減一個字段的值( 如不加第二個參數(shù),默認步長為1)。
自增
Db::name('app_service')->where('id', 18)->inc('name', 1)->update();
Db::name('app_service')->where('id', 18)->inc('addtime')->update();
自減
Db::name('app_service')->where('id', 18)->dec('addtime', 1)->update();
Db::name('app_service')->where('id', 18)->dec('addtime')->update();
注意:當要操作的字段值為NULL時,自增/自減不執(zhí)行。
15.刪除數(shù)據(jù)
條件刪除
Db::name('app_service')->where('id',18)->delete();
Db::name('app_service')->where('id','>',15)->delete();
返回結(jié)果:
刪除條數(shù)
16.刪除全部數(shù)據(jù)
Db::name('app_service')->delete(true);
需要設(shè)置為true,否則拋出“沒有條件不會執(zhí)行刪除操作”提示