• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    YII2框架中查询生成器Query()的使用方法示例

    本文实例讲述了YII2框架中查询生成器Query()的使用方法。分享给大家供大家参考,具体如下:

    YII2中的yii\db\Query给我们提供了非常丰富的方法,方便我们构建复杂的SQL语句。

    Query()与createCommand最大区别在于,后者直接使用我们写好的SQL语句,前者通过参数和数据库类型生成不同SQL,迁移性更好。

    ?php
    namespace app\controllers;
     
    use YII;
    use yii\db\Query;
    use yii\web\Controller;
     
    class TestController extends Controller
    {
      public function actionTest()
      {
        //YII2的Query的使用
        //Query与createCommand的区别是createCommand是直接写一个SQL来执行。
        //Query是根据参数和数据库类型生成不同的SQL,提升数据库可迁移性。
     
        //通过all查询多条记录
        //我这里用tb_user表来进行演示
        $data1 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->all();
     
        //指定where条件查询
        $data2 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where('id=:id', [':id' => '2'])
          ->all();
     
        //通过one查询单条记录
        $data3 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where('id=3')
          ->one();
     
        //判断记录是否存在
        $exists = (new Query())->from('{{%user}}')
          ->where('name="aaa"')
          ->exists();
     
        if ($exists) {
          echo 'name=aaa 存在';
        }
     
        //定义字段别名
        //注意真实的字段名写后面,别名写前面
        $data4 = (new Query())->select(['ids' => 'id', 'names' => 'name'])
          ->from('{{%user}}')
          ->where('1=1')
          ->all();
     
        //通过orderby排序,和limit限制条数
        $data5 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where('1=1')
          ->orderBy('id desc')
          ->limit(3)
          ->all();
     
        //多个and条件
        //参数是数组,一个key对应一个value,默认以and拼接
        $data6 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['id' => 3, 'name' => 'aaa'])
          ->one();
     
        //in条件
        $data7 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['id' => [4, 5, 6]])
          ->all();
     
        //或者如下方式
        $data7_2 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['in', 'id', [4, 5, 6]])
          ->all();
     
        //count统计
        $count = (new Query())->from('{{%user}}')->count();
        echo '总记录数: ', $count;
     
        //大于,大于等于,小于,小于等于where条件
        $data8 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['>=', 'id', 5])
          ->all();
     
        $data9 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['=', 'id', 3])
          ->all();
     
        //like查询
        $data10 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['like', 'name', 'dd'])
          ->all();
     
        //between筛选和group by分组
        //查找出age在18到24之间的,并按sex分组
        $data11 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['between', 'age', 18, 24])
          ->groupBy('sex')
          ->all();
     
        //having筛选
        //按sex分组,然后统计人数大于3的
        $data12 = (new Query())->select(['sex', 'cnt' => 'count(*)'])
          ->from('{{%user}}')
          ->groupBy('sex')
          ->having('cnt > 3')
          ->all();
     
        //or逻辑条件
        //查找姓名为aaa或bbb的用户
        //之前where数组是以key=>value方式传递的,如果要表达复杂逻辑关系,
        //数组第一个元素必须声明是什么逻辑,and还是or
        //第二个元素表示逻辑左边
        //第三个元素表示逻辑右边
        $data13 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['or', ['name' => 'aaa'], ['name' => 'bbb']])
          ->all();
     
        //复杂的where条件
        //我这里只是作为演示
        //SELECT `id`, `name` FROM `tb_user` WHERE ((`name`='aaa') OR (`name`='bbb')) OR ((`name`='ccc') OR (`name`='ddd'))
        $data14 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where([
            'or',
            [
              'or',
              ['name' => 'aaa'],
              ['name' => 'bbb'],
            ],
            [
              'or',
              ['name' => 'ccc'],
              ['name' => 'ddd'],
            ],
          ])
          ->all();
     
        //and和or嵌套where条件
        //SELECT `id`, `name` FROM `tb_user` WHERE (`sex`=1) AND ((`name` LIKE '%aa%') OR (`name` LIKE '%bb%'))
        $data15 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where([
            'and',
            ['sex' => 1],
            [
              'or',
              ['like', 'name', 'aa'],
              ['like', 'name', 'bb'],
            ],
          ])
          ->all();
     
        //有些时候我们需要根据用户传递过来的参数追加where条件
        //追加and条件
        $query = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where('sex=1');
        //追加age大于18的条件
        $query->andWhere(['>', 'age', 18]);
        echo $query->createCommand()->getRawSql();
     
        //追加or条件
        $query2 = (new Query())->select(['id', 'name'])
          ->from('{{%user}}')
          ->where(['like', 'name', 'aa']);
        //追加name相似bb的条件
        $query2->orWhere(['like', 'name', 'bb']);
        echo $query2->createCommand()->getRawSql();
     
        //表别名和连接查询
        //SELECT `u`.`id`, `u`.`name`, `aa`.`item_name` FROM `tb_user` `u` LEFT JOIN `tb_auth_assignment` `aa` ON aa.user_id = u.id
        $data16 = (new Query())->select(['u.id', 'u.name', 'aa.item_name'])
          ->from(['u' => '{{%user}}'])
          ->leftJoin(['aa' => '{{%auth_assignment}}'], 'aa.user_id = u.id')
          ->all();
      }
    }
    
    

    更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • yii2.0框架实现上传excel文件后导入到数据库的方法示例
    • YII2框架中日志的配置与使用方法实例分析
    • YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
    • YII2框架中behavior行为的理解与使用方法示例
    • YII2 全局异常处理深入讲解
    上一篇:YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
    下一篇:YII2框架中日志的配置与使用方法实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    YII2框架中查询生成器Query()的使用方法示例 YII2,框架,中,查询,生,成器,