1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册
基本查詢
查詢單個數(shù)據(jù)使用find方法:
// table方法必須指定完整的數(shù)據(jù)表名
Db::table('think_user')->where('id',1)->find();
最終生成的SQL語句可能是:
SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1
find 方法查詢結(jié)果不存在,返回 null,否則返回結(jié)果數(shù)組
如果希望在沒有找到數(shù)據(jù)后拋出異常可以使用
// table方法必須指定完整的數(shù)據(jù)表名
Db::table('think_user')->where('id',1)->findOrFail();
如果沒有查找到數(shù)據(jù),則會拋出一個think\db\exception\DataNotFoundException異常。
查詢多個數(shù)據(jù)(數(shù)據(jù)集)使用select方法:
Db::table('think_user')->where('status',1)->select();
最終生成的SQL語句可能是:
SELECT * FROM `think_user` WHERE `status` = 1
select 方法查詢結(jié)果是一個二維數(shù)組,如果結(jié)果不存在,返回空數(shù)組
如果希望在沒有查找到數(shù)據(jù)后拋出異常可以使用
Db::table('think_user')->where('status',1)->selectOrFail();
如果沒有查找到數(shù)據(jù),同樣也會拋出一個think\db\exception\DataNotFoundException異常。
如果設(shè)置了數(shù)據(jù)表前綴參數(shù)的話,可以使用
Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
如果你的數(shù)據(jù)表沒有設(shè)置表前綴的話,那么name和table方法效果一致。
在find和select方法之前可以使用所有的鏈?zhǔn)讲僮?參考鏈?zhǔn)讲僮髡鹿?jié))方法。
默認(rèn)情況下,find和select方法返回的都是數(shù)組,區(qū)別在于后者是二維數(shù)組。
助手函數(shù)
系統(tǒng)提供了一個db助手函數(shù),可以更方便的查詢:
db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
db方法的第一個參數(shù)的作用和name方法一樣,如果需要使用不同的數(shù)據(jù)庫連接,可以使用:
db('user','db_config1')->where('id', 1)->find();
值和列查詢
查詢某個字段的值可以用
// 返回某個字段的值
Db::table('think_user')->where('id',1)->value('name');
value 方法查詢結(jié)果不存在,返回 null
查詢某一列的值可以用
// 返回數(shù)組
Db::table('think_user')->where('status',1)->column('name');
// 指定id字段的值作為索引
Db::table('think_user')->where('status',1)->column('name','id');
如果要返回完整數(shù)據(jù),并且添加一個索引值的話,可以使用
// 指定id字段的值作為索引 返回所有數(shù)據(jù)
Db::table('think_user')->where('status',1)->column('*','id');
column 方法查詢結(jié)果不存在,返回空數(shù)組
數(shù)據(jù)分批處理
如果你需要處理成千上百條數(shù)據(jù)庫記錄,可以考慮使用chunk方法,該方法一次獲取結(jié)果集的一小塊,然后填充每一小塊數(shù)據(jù)到要處理的閉包,該方法在編寫處理大量數(shù)據(jù)庫記錄的時候非常有用。
比如,我們可以全部用戶表數(shù)據(jù)進(jìn)行分批處理,每次處理 100 個用戶記錄:
Db::table('think_user')->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
// 或者交給回調(diào)方法myUserIterator處理
Db::table('think_user')->chunk(100, 'myUserIterator');
你可以通過從閉包函數(shù)中返回false來中止對后續(xù)數(shù)據(jù)集的處理:
Db::table('think_user')->chunk(100, function($users) {
foreach ($users as $user) {
// 處理結(jié)果集...
if($user->status==0){
return false;
}
}
});
也支持在chunk方法之前調(diào)用其它的查詢方法,例如:
Db::table('think_user')
->where('score','>',80)
->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
chunk方法的處理默認(rèn)是根據(jù)主鍵查詢,支持指定字段,例如:
Db::table('think_user')->chunk(100, function($users) {
// 處理結(jié)果集...
return false;
},'create_time');
并且支持指定處理數(shù)據(jù)的順序。
Db::table('think_user')->chunk(100, function($users) {
// 處理結(jié)果集...
return false;
},'create_time', 'desc');
chunk方法一般用于命令行操作批處理數(shù)據(jù)庫的數(shù)據(jù),不適合WEB訪問處理大量數(shù)據(jù),很容易導(dǎo)致超時。
大批量數(shù)據(jù)處理
如果你需要處理大量的數(shù)據(jù),可以使用新版提供的游標(biāo)查詢功能,該查詢方式利用了PHP的生成器特性,可以大幅減少大量數(shù)據(jù)查詢的內(nèi)存占用問題。
$cursor = Db::table('user')->where('status', 1)->cursor();
foreach($cursor as $user){
echo $user['name'];
}
cursor方法返回的是一個生成器對象,user變量是數(shù)據(jù)表的一條數(shù)據(jù)(數(shù)組)。
JSON類型數(shù)據(jù)查詢(mysql)
// 查詢JSON類型字段 (info字段為json類型)
Db::table('think_user')
->where('info->email','thinkphp@qq.com')
->find();
總結(jié)
以上是生活随笔為你收集整理的1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器物理内存总是九十几,Solr总是使
- 下一篇: mysql connector net