Query Builder

[php] view plain copy

$rows = (new \yii\db\Query())  

  1.     ->select(['dyn_id''dyn_name'])  

  2.     ->from('zs_dynasty')  

  3.     ->where(['between','dyn_id', 1,30])  

  4.     ->limit(10)  

  5.     ->all();  

  6. print_r($rows);  


[php] view plain copy 

  1. use yii\db\Query;  

  2. $query = (new Query())  

  3.     ->from('user')  

  4.     ->orderBy('id');  


SELECT

[php] view plain copy 

  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 

  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 

  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 

  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 

  1. $query->filterWhere([  

  2.     'username' => $username,  

  3.     'email' => $email,  

  4. ]);  

  5. //如果email为空,则 WHERE username=:username  

ORDER BY

[php] view plain copy 

  1. $query->orderBy([  

  2.     'id' => SORT_ASC,  

  3.     'name' => SORT_DESC,  

  4. ]);  

  5. //orderBy , addOrderBy  


GROUP BY

[php] view plain copy 

  1. $query->groupBy('id, status');  

  2. $query->addGroupBy(['created_at''updated_at']);  


HAVING 

[php] view plain copy 

  1. $query->having(['status' => $status]);  

  2. //having,andHaving,orHaving  


LIMIT OR OFFSET

[php] view plain copy 

  1. $query->limit(10);  

  2. $query->offset(10);  


JOIN

  • innerJoin()

  • leftJoin()

  • rightJoin()

[php] view plain copy 

  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 

  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 

  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.   

  7.   

  8. $command = (new \yii\db\Query())  

  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 

  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

[php] view plain copy 

  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. }  

转自http://blog.csdn.net/hzqghost/article/details/44117081