zoukankan      html  css  js  c++  java
  • [moka同学笔记]Yii2 数据操作Query Builder

    Query Builder

    [php] view plain copy
     
    1. $rows = (new yiidbQuery())  
    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);  
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. use yiidbQuery;  
    2. $query = (new Query())  
    3.     ->from('user')  
    4.     ->orderBy('id');  
     
    SELECT
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $query->filterWhere([  
    2.     'username' => $username,  
    3.     'email' => $email,  
    4. ]);  
    5. //如果email为空,则 WHERE username=:username  
     
    ORDER BY
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $query->orderBy([  
    2.     'id' => SORT_ASC,  
    3.     'name' => SORT_DESC,  
    4. ]);  
    5. //orderBy , addOrderBy  
     
    GROUP BY
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $query->groupBy('id, status');  
    2. $query->addGroupBy(['created_at''updated_at']);  
     
    HAVING 
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $query->having(['status' => $status]);  
    2. //having,andHaving,orHaving  
     
    LIMIT OR OFFSET
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $query->limit(10);  
    2. $query->offset(10);  
     
    JOIN
     
    • innerJoin()
    • leftJoin()
    • rightJoin()
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    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 为字段或表达式
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. $count = (new yiidbQuery())  
    2.     ->from('user')  
    3.     ->where(['last_name' => 'Smith'])  
    4.     ->count();  
    5. //SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name  
    6.   
    7.   
    8. $command = (new yiidbQuery())  
    9.     ->select(['id''email'])  
    10.     ->from('user')  
    11.     ->where(['last_name' => 'Smith'])  
    12.     ->limit(10)  
    13.     ->createCommand();  
    14.       
    15. // show the SQL statement  
    16. echo $command->sql;  
    17. // show the parameters to be bound  
    18. print_r($command->params);  
    19.   
    20.   
    21. // returns all rows of the query result  
    22. $rows = $command->queryAll();  
     
    QUERY RESULTS
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. use yiidbQuery;  
    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
     
    [php] view plain copy
     
    在CODE上查看代码片派生到我的代码片
    1. use yiidbQuery;  
    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. }  
     
     
     
     
    我生活的地方,我为何要生活。
  • 相关阅读:
    双阈值对抗数据抖动
    ES6 初体验 —— gulp+Babel 搭建ES6环境
    chrome 浏览器插件开发(二)—— 通信 获取页面变量 编写chrome插件专用的库
    邮件模板——开发篇
    Java-eclipse导入jar包
    php小程序-文章发布系统(mvc框架)
    php小程序-文章发布系统
    php小项目-web在线文件管理器
    杂论—电脑远程控制
    PHP-正则表达式
  • 原文地址:https://www.cnblogs.com/hsd1727728211/p/6051989.html
Copyright © 2011-2022 走看看