美文网首页ThinkPhp5入门
TP5的查询构造器

TP5的查询构造器

作者: 傲娇的泰迪 | 来源:发表于2018-01-12 09:07 被阅读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操作

    相关文章

      网友评论

        本文标题:TP5的查询构造器

        本文链接:https://www.haomeiwen.com/subject/jyxtoxtx.html