前面课程中我们通过指向符号“->”多次连续调用方法称为:链式查询,当 Db::name(‘user’)时,返回查询对象(Query),即可连缀数据库对应的方法,而每次执行一个数据库查询方法时,比如 where(),还将返回查询对象(Query),只要还是数据库对象,那么就可以一直使用指向符号进行链式查询,再利用 find()、select()等方法返回数组(Array)或数据集对象(Colletion),而 find()和 select()是结果查询方法(放在最后),并不是链式查询方法
public function index()
{
$user = Db::name('user')->where('id', 27)->order('id', 'desc')->find();
dump($user);
}
有多少种类似 where()的链式操作方法呢,官方文档
如果多次使用数据库查询,那么每次静态创建都会生成一个实例,造成浪费, 我们可以把对象实例保存下来,再进行反复调用即可
public function index()
{
$userQuery = Db::name('user');
$dataFind = $userQuery->where('id', 5)->find();
dump($dataFind);
$dataSelect = $userQuery->select();
dump($dataSelect);
}
当同一个对象实例第二次查询后,会保留第一次查询的值
public function index()
{
$userQuery = Db::name('user');
$data1 = $userQuery->order('id', 'desc')->select();
echo Db::getLastSql();
$data2 = $userQuery->select();
echo "<br>";
echo Db::getLastSql();;
}
使用 removeOption()方法,可以清理掉上一次查询保留的值
public function index()
{
$userQuery = Db::name('user');
$data1 = $userQuery->order('id', 'desc')->select();
echo Db::getLastSql();
$userQuery->removeOption('order')->select();
$data2 = $userQuery->select();
echo "<br>";
echo Db::getLastSql();;
}