一開始用painate()這個函數的時候,發現有的查詢方式不能使用這個函數,由此了解到了模型查詢和普通查詢返回類型的不同
1.原生查詢方法
Db::query("select * from shop");
查詢成功返回:二維數組
array(2) {
[0]=>
array(5) {
["username"]=>
string(0) ""
["title"]=>
string(10) "java課本"
["comment"]=>
string(22) "java課本課本課本"
["time"]=>
string(19) "2019-02-18 23:12:03"
["id"]=>
int(1)
}
[1]=>
array(5) {
["username"]=>
string(0) ""
["title"]=>
string(1) "c"
["comment"]=>
string(10) "cccccccccc"
["time"]=>
string(19) "2019-02-18 23:12:26"
["id"]=>
int(2)
}
}
查詢失敗:array(0) { }
二維數組為空
2.查詢構造器
select方法
Db::table('shop')->select();
返回的是二維數組,和原生的查詢結果一樣,查詢失敗同樣返回空數組。
find方法
Db::table('shop')->find();
只能查詢一條數據,返回的是第一個查詢到的數據,方式是一維數組
array(5) {
["username"] => string(0) ""
["title"] => string(10) "java課本"
["comment"] => string(22) "java課本課本課本"
["time"] => string(19) "2019-02-18 23:12:03"
["id"] => int(1)
}
查詢失敗:NULL
需要分頁的時候:
Db::name('shop')->paginate(10); 需要分頁的時候不能用select,因為數組在tp5中是不支持直接分頁的,->paginate()的使用者必須是個object類型。
3.模型
首先知道,模型查出來的數據都是對象,要轉化為數組的方法是在database.php加上
'resultset_type' => '\think\Collection', 便可以調用->toArray()方法
實際上,因為tp5框架的設計,兩種數據在進行數據處理上沒有差別
1.get方法
①用來查詢一條數據
$test3=Shop::get(1);或者$test3 = Shop::get(['id' => '1']); echo $test3->time;
返回類型:對象。
通過
$test3=Shop::get(1)->toArray();變為一維數組
②查詢失敗:返回NULL
2.all方法
① 用來查詢一堆數據,toArray()后變為二維數組
② 遍歷
foreach ($test3 as $key => $value) {
var_dump($value['time']);//time是字段名字
}
③查詢失敗
不變為數組返回:} object(think\Collection)#19 (1) { ["items":protected]=> array(0) { } }
變為數組返回:空數組
3.select方法
$test4=Shop::select();
foreach ($test4 as $key ) {
var_dump($key['time']);//time字段
}
使用處理二維數組的方法處理就好了
4.find也可以用
5.分頁
使用者必須是對象
模型的分頁,官方:
$test6=Shop::paginate(10);
我自己試了下,發現find查詢出來的語句也是可以分頁的,select就不行了。