1、查詢構造器的工作原理?
在\think\db文件夾下,有Builder.php生成類、Connection.php連接器類和Query.php查詢類,它們里面就有各種方法。
生成類是一個抽象類,所以不能被實例化。
2、什么是鏈式操作?為什么要用鏈式操作?
鏈式操作中的方法來自query.php查詢類
鏈式操作原理
在index.php中:
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
dump(
Db::table('staff') //鏈式操作,返回表名為staff的對象
->field(['name','salary']) //鏈式操作,返回上一個對象中只保留name和salary字段后的對象
->where('id',1006) //鏈式操作,返回上一個對象中只保留id為1006記錄的對象
->find() //終極操作,將上一個對象返回并顯示
);
}
}
?>
3、數據表的查詢條件是如何生成的?
查詢條件生成原理
在index.php文件中:
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
/***************字符串查詢方式***************/
dump(
Db::table('staff')
->field(['name','salary'])
->where('salary','>',3000)
->select()
);
/***************數組查詢方式***************/
dump(
Db::table('staff')
->field(['name','salary'])
->where([
'id'=>['>',1003],
'salary'=>['>',3000]
])
->select()
);
/***************閉包查詢方式***************/
dump(
Db::table('staff')
->field(['name','salary'])
->where(function($query){
$query->where('id','>',1003)
->where('salary','>',3000) //如果這里的3000不想寫死,想從外部傳進,往下看……
})
->select()
);
/***************如果不想寫死,如下:***************/
$salary = 3000;
dump(
Db::table('staff')
->field(['name','salary'])
->where(function($query) use ($salary){
$query->where('id','>',1003)
->where('salary','>',$salary)
})
->select()
);
/*******************再次簡化如下******************/
$salary = 4000;
dump(
Db::select(
function($query) use ($salary){
$query->table('staff')
->field(['name'=>'姓名','salary'=>'工資'])
->where([
'id'=>['>',1003],
'salary'=>['>',$salary]
]);
})
);
}
}
?>
4、如何用查詢構造器實現數據表的增刪改查(CURD)操作?
CURD操作