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