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]
]);
})
);
}
}
?>