Query Builder

  1. $rows = (new \yii\db\Query())
  2. ->select(['dyn_id', 'dyn_name'])
  3. ->from('zs_dynasty')
  4. ->where(['between','dyn_id', 1,30])
  5. ->limit(10)
  6. ->all();
  7. print_r($rows);
  1. use yii\db\Query;
  2. $query = (new Query())
  3. ->from('user')
  4. ->orderBy('id');

SELECT

  1. $query->select('*')->
  2. select('dyn_id as id, dynasty.dyn_name')->
  3. $query->select(['dyn_id as id', "CONCAT(dyn_name,'a')"])->
  4. $query->select('user_id')->distinct()->

FORM

  1. $query->from('user');
  2. $query->from(['public.user u', 'public.post p']);
  3. $query->from('public.user u, public.post p');
  4. $query->from(['u' => 'public.user', 'p' => 'public.post']);
  5. ----------
  6. $subQuery = (new Query())->select('id')->from('user')->where('status=1');
  7. // SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u
  8. $query->from(['u' => $subQuery]);

WHERE

  1. where('status=1')->
  2. where('status=:status', [':status' => $status])->
  3. where([
  4. 'status' => 10,
  5. 'type' => null,
  6. 'id' => [4, 8, 15],
  7. ])->
  8. -------
  9. $userQuery = (new Query())->select('id')->from('user');
  10. // ...WHERE `id` IN (SELECT `id` FROM `user`)
  11. $query->...->where(['id' => $userQuery])->...
  12. --------
  13. ['and', 'id=1', 'id=2'] //id=1 AND id=2
  14. ['and', 'type=1', ['or', 'id=1', 'id=2']] //type=1 AND (id=1 OR id=2)
  15. ['between', 'id', 1, 10] //id BETWEEN 1 AND 10
  16. ['not between', 'id', 1, 10] //not id BETWEEN 1 AND 10
  17. ['in', 'id', [1, 2, 3]] //id IN (1, 2, 3)
  18. ['not in', 'id', [1, 2, 3]] //not id IN (1, 2, 3)
  19. ['like', 'name', 'tester'] //name LIKE '%tester%'
  20. ['like', 'name', ['test', 'sample']] //name LIKE '%test%' AND name LIKE '%sample%'
  21. ['not like', 'name', ['or', 'test', 'sample']] //not name LIKE '%test%' OR not name LIKE '%sample%'
  22. ['exists','id', $userQuery] //EXISTS (sub-query) | not exists
  23. ['>', 'age', 10] //age>10

ADD WHERE

  1. $status = 10;
  2. $search = 'yii';
  3. $query->where(['status' => $status]);
  4. if (!empty($search)) {
  5. $query->andWhere(['like', 'title', $search]);
  6. }
  7. //WHERE (`status` = 10) AND (`title` LIKE '%yii%')
  8. //andWhere() or orWhere()



FILTER WHERE

  1. $query->filterWhere([
  2. 'username' => $username,
  3. 'email' => $email,
  4. ]);
  5. //如果email为空,则 WHERE username=:username
 

ORDER BY

  1. $query->orderBy([
  2. 'id' => SORT_ASC,
  3. 'name' => SORT_DESC,
  4. ]);
  5. //orderBy , addOrderBy


GROUP BY

  1. $query->groupBy('id, status');
  2. $query->addGroupBy(['created_at', 'updated_at']);


HAVING 

  1. $query->having(['status' => $status]);
  2. //having,andHaving,orHaving

LIMIT OR OFFSET

  1. $query->limit(10);
  2. $query->offset(10);

JOIN

  • innerJoin()
  • leftJoin()
  • rightJoin()
  1. $query->select(['user.name AS author', 'post.title as title'])
  2. ->from('user')
  3. ->leftJoin('post', 'post.user_id = user.id');
  4. $query->join('FULL OUTER JOIN', 'post', 'post.user_id = user.id');
  5. $query->leftJoin(['u' => $subQuery], 'u.id=author_id');


UNION

  1. $query = new Query();
  2. $query->select("id, category_id as type, name")->from('post')->limit(10);
  3. $anotherQuery = new Query();
  4. $anotherQuery->select('id, type, name')->from('user')->limit(10);
  5. $query->union($anotherQuery);


QUERY METHODS

  • all() //所有行列
  • one() //第一行
  • column() //第一列
  • scalar() //第一行第一列
  • exists() //是否有结果存在
  • count() //记录数量
  • sum($q), average($q), max($q), min($q) //$q 为字段或表达式
  1. $count = (new \yii\db\Query())
  2. ->from('user')
  3. ->where(['last_name' => 'Smith'])
  4. ->count();
  5. //SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name
  6. $command = (new \yii\db\Query())
  7. ->select(['id', 'email'])
  8. ->from('user')
  9. ->where(['last_name' => 'Smith'])
  10. ->limit(10)
  11. ->createCommand();
  12. // show the SQL statement
  13. echo $command->sql;
  14. // show the parameters to be bound
  15. print_r($command->params);
  16. // returns all rows of the query result
  17. $rows = $command->queryAll();
 
QUERY RESULTS
  1. use yii\db\Query;
  2. $query = (new Query())
  3. ->from('user')
  4. ->indexBy('username');
  5. foreach ($query->batch() as $users) {
  6. // $users is indexed by the "username" column
  7. }
  8. foreach ($query->each() as $username => $user) {
  9. }

INDEXING
  1. use yii\db\Query;
  2. $query = (new Query())
  3. ->from('user')
  4. ->orderBy('id');
  5. foreach ($query->batch() as $users) {
  6. // batch( $batchSize = 100, $db = null )
  7. // 一个批次取100行
  8. }
  9. foreach ($query->each() as $user) {
  10. // 一行一行取
  11. }

yii2 查询构建器的更多相关文章

  1. Yii2 查询构建器 QueryBuilder

    查询构造器 QueryBuilder 1.什么是查询构建器 查询构建器也是建立在 DAO 基础之上,可让你创建程序化的.DBMS 无关的 sql 语句,并且这样创建的 sql 语句比原生的 sql 语 ...

  2. [转]Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询

    本文转自:https://laravelacademy.org/post/920.html 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现 ...

  3. Laravel5.1 数据库-查询构建器

    今儿个咱说说查询构建器.它比运行原生SQL要简单些,它的操作面儿也是比较广泛的. 1 查询结果 先来看看它的语法: public function getSelect() { $result = DB ...

  4. DB门面,查询构建器,Eloquent ORM三者的CURD

    一.DB门面 1.insert DB::insert('insert into table(`name`) value(?)', ['test']); 2.update DB::update('upd ...

  5. Laravel 数据库实例教程 —— 使用查询构建器对数据库进行增删改查

    原文地址:https://blog.csdn.net/lmy_love_/article/details/72832259 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table方法, ...

  6. laravel5.6操作数据curd写法(查询构建器)

    laravel5.6 数据库操作-查询构建器 <?php //laravel5.6 语法 demo示例 namespace App\Http\Controllers;//命名该控制App空间下名 ...

  7. Yii2将查询数据变为键值对数组及查询构建器

  8. laravel 查询构建器(连贯操作)

    注:laravel 查询返回行的都是 php 的 stdClass 对象实例,不是数组!!!! 1)查询多行(get) DB::table('table_name')->get(); 带偏移和限 ...

  9. 定义查询构建器IFeatureLayerDefinition

    在宗地出图,需要实现,只显示某一户人的地块.在ArcMap里,有个定义查询,可只显示过滤后的要素. 在代码中,也比较好实现,使用IFeatureLayerDefinition接口即可. IFeatur ...

随机推荐

  1. python_7_列表

    什么是列表? --一种数据类型 -- 形式:[值1,值2,[值a,值b],值3]      --可以嵌套 #!/usr/bin/python3 list_a = [1, 2, [3, 'a']] 对于 ...

  2. CSS深入理解学习笔记之z-index

    1.z-index基础 z-index含义:指定了元素及其子元素的"z顺序",而"z顺序"可以决定元素的覆盖顺序.z-index值越大越在上面. z-index ...

  3. spring加载资源文件中classpath*与classpath的区别

    在spring和MyBatis继承的时候,配置mapperLocations.一开始配置是这样的. 需要加载路径为com/thomas/base/mapper和com/thomas/bu/mapper ...

  4. redis数据类型-散列类型

    Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...

  5. C# 类型基础(上)

    C#类型都派生自System.Object 祖先的优良传统:Object的公共方法 Equals: 对象的同一性而非相等性 GetHashCode:返回对象的值的哈希码 ToString:默认返回类型 ...

  6. 【原创】POI 生成Excel文件并下载

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apa ...

  7. Python之Django rest_Framework(2)

    实例化: v1 = ["view.xxx.path.Role","view.xxx.path.Group",] 可以循环,循环出来的每一个不能实例化 如果把v1 ...

  8. 细说Django的admin

    在admin.py中只需要将地Model中某个类注册,即可在Admin中进行增删查改的功能,例如: admin.site.register(models.UserInfo) 这种方式比较简单,如果想要 ...

  9. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

  10. setinIerval和setTimeout的区别?

    setTimeout和setInterval的使用 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript.不过两者各有各的应用场景. 方 法 实际上,setTimeout和setIn ...