ThinkPhp5入门

TP5的查询构造器

2018-01-12  本文已影响0人  傲娇的泰迪

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操作
上一篇下一篇

猜你喜欢

热点阅读