Yii2数据操作Query Builder详解

Query Builder

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

->select(['dyn_id', 'dyn_name'])

->from('zs_dynasty')

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

->limit(10)

->all();

print_r($rows);

在CODE上查看代码片派生到我的代码片

use yii\db\Query;

$query = (new Query())

->from('user')

->orderBy('id');

SELECT

在CODE上查看代码片派生到我的代码片

$query->select('*')->

select('dyn_id as id, dynasty.dyn_name')->

$query->select(['dyn_id as id', "CONCAT(dyn_name,'a')"])->

$query->select('user_id')->distinct()->

FORM

在CODE上查看代码片派生到我的代码片

$query->from('user');

$query->from(['public.user u', 'public.post p']);

$query->from('public.user u, public.post p');

$query->from(['u' => 'public.user', 'p' => 'public.post']);

----------

$subQuery = (new Query())->select('id')->from('user')->where('status=1');

// SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u

$query->from(['u' => $subQuery]);

WHERE

在CODE上查看代码片派生到我的代码片

where('status=1')->

where('status=:status', [':status' => $status])->

where([

'status' => 10,

'type' => null,

'id' => [4, 8, 15],

])->

-------

$userQuery = (new Query())->select('id')->from('user');

// ...WHERE `id` IN (SELECT `id` FROM `user`)

$query->...->where(['id' => $userQuery])->...

--------

['and', 'id=1', 'id=2'] //id=1 AND id=2

['and', 'type=1', ['or', 'id=1', 'id=2']] //type=1 AND (id=1 OR id=2)

['between', 'id', 1, 10] //id BETWEEN 1 AND 10

['not between', 'id', 1, 10] //not id BETWEEN 1 AND 10

['in', 'id', [1, 2, 3]] //id IN (1, 2, 3)

['not in', 'id', [1, 2, 3]] //not id IN (1, 2, 3)

['like', 'name', 'tester'] //name LIKE '%tester%'

['like', 'name', ['test', 'sample']] //name LIKE '%test%' AND name LIKE '%sample%'

['not like', 'name', ['or', 'test', 'sample']] //not name LIKE '%test%' OR not name LIKE '%sample%'

['exists','id', $userQuery] //EXISTS (sub-query) | not exists

['>', 'age', 10] //age>10

ADD WHERE

在CODE上查看代码片派生到我的代码片

$status = 10;

$search = 'yii';

$query->where(['status' => $status]);

if (!empty($search)) {

$query->andWhere(['like', 'title', $search]);

}

//WHERE (`status` = 10) AND (`title` LIKE '%yii%')

//andWhere() or orWhere()

FILTER WHERE

在CODE上查看代码片派生到我的代码片

$query->filterWhere([

'username' => $username,

'email' => $email,

]);

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

ORDER BY

在CODE上查看代码片派生到我的代码片

$query->orderBy([

'id' => SORT_ASC,

'name' => SORT_DESC,

]);

//orderBy , addOrderBy

GROUP BY

在CODE上查看代码片派生到我的代码片

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

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

HAVING

在CODE上查看代码片派生到我的代码片

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

//having,andHaving,orHaving

LIMIT OR OFFSET

在CODE上查看代码片派生到我的代码片

$query->limit(10);

$query->offset(10);

JOIN

innerJoin()

leftJoin()

rightJoin()

在CODE上查看代码片派生到我的代码片

$query->select(['user.name AS author', 'post.title as title'])

->from('user')

->leftJoin('post', 'post.user_id = user.id');

$query->join('FULL OUTER JOIN', 'post', 'post.user_id = user.id');

$query->leftJoin(['u' => $subQuery], 'u.id=author_id');

UNION

在CODE上查看代码片派生到我的代码片

$query = new Query();

$query->select("id, category_id as type, name")->from('post')->limit(10);

$anotherQuery = new Query();

$anotherQuery->select('id, type, name')->from('user')->limit(10);

$query->union($anotherQuery);

QUERY METHODS

all() //所有行列

one() //第一行

column() //第一列

scalar() //第一行第一列

exists() //是否有结果存在

count() //记录数量

sum($q), average($q), max($q), min($q) //$q 为字段或表达式

在CODE上查看代码片派生到我的代码片

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

->from('user')

->where(['last_name' => 'Smith'])

->count();

//SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name

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

->select(['id', 'email'])

->from('user')

->where(['last_name' => 'Smith'])

->limit(10)

->createCommand();

// show the SQL statement

echo $command->sql;

// show the parameters to be bound

print_r($command->params);

// returns all rows of the query result

$rows = $command->queryAll();

QUERY RESULTS

在CODE上查看代码片派生到我的代码片

use yii\db\Query;

$query = (new Query())

->from('user')

->indexBy('username');

foreach ($query->batch() as $users) {

// $users is indexed by the "username" column

}

foreach ($query->each() as $username => $user) {

}

INDEXING

在CODE上查看代码片派生到我的代码片

use yii\db\Query;

$query = (new Query())

->from('user')

->orderBy('id');

foreach ($query->batch() as $users) {

// batch( $batchSize = 100, $db = null )

// 一个批次取100行

}

foreach ($query->each() as $user) {

// 一行一行取

}

时间: 2024-10-12 08:24:41

Yii2数据操作Query Builder详解的相关文章

Oracle数据操作和控制语言详解_oracle

正在看的ORACLE教程是:Oracle数据操作和控制语言详解.SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL.其中用于定义数据的结构,比如 创建.修改或者删除数据库:DCL用于定义数据库用户的权限:在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法.  DML语言 DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句. 插入数据 INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可

Oracle数据操作和控制语言详解

oracle|控制|数据|详解 插入数据    INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可以用子查询从已存在的数据中建立新行.    列目录是可选的,缺省的列的目录是所有的列名,包括comlumn_id,comlumn_id可以在数据字典视图ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到.    插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配.不符合列定义的数据类型将对插入值实行隐式数据转换.NUL

Oracle数据操作和控制语言详解 (一)

oracle|控制|数据|详解 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL.其中用于定义数据的结构,比如 创建.修改或者删除数据库:DCL用于定义数据库用户的权限:在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法. DML语言 DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句. 语句 用途 INSERT 向表中添加行 UPDATE 更新存储在表中的数据 DELETE 删除行 SELECT

Oracle数据操作和控制语言详解(二)

oracle|控制|数据|详解 事务控制 事务控制包括协调对相同数据的多个同步的访问.当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据. 事务 事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句.在SQL和PL/SQL中有很多语句让程序员控制事务.程序员可以: 1.显式开始一个事物,选择语句级一致性或事务级一致性 2.设置撤销回滚点,并回滚到回滚点 3.完成事务永远改变数据或者放弃修改. 事务控制语句 语句 用途 Commit 完成事

Oracle数据操作和控制语言详解(三)

oracle|控制|数据|详解 建立和修改用户 CREATE USER 语句将建立一个用户.当一个用户连接到ORACLE数据库时,它必须被验证.ORACLE中验证有三种类型: Database external Global 缺省是数据库验证,当用户连接到数据库时,oracle将检测用户是否是数据库的合法用户,并且要提供正确的password.external验证,oracle将只检测用户是否是合法用户,password已经被网络或系统验证了.global验证也是只检测是否是合法用户,passw

Oracle误删除表数据后的数据恢复详解_oracle

Oracle误删除表数据后的恢复详解   测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2   1. undo_retention参数的查询与修改 使用show parameter undo命令查看当前的数据库参数undo_retention设置. 显示如下: SQL> show parameter undo NAME                                 TYPE        V

Android 模仿iPhone列表数据View刷新动画详解_Android

因为我本人很喜欢在不同的页面之间跳转时加点好玩的动画,今天无意间看到一个动画效果感觉不错,几种效果图如下:既然好玩就写在博客中,直接说就是:该效果类似于iPhone中View的切换动画效果,今天就只介绍上面展示的效果. 废话不多说,先上效果,再看代码!! 效果一: 效果二: 效果三: 效果四:(犯错的效果): 效果五(回旋效果一): 效果六(回旋效果二): 效果看完了,就来看下上面效果实现的具体代码吧, 中间会把我自己试验的.犯的错误都以注释的形式写下来的, 大家使用的时候别出错就行了!先来看下

PHP实现链式操作的原理详解_php实例

在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用,类似: db.php <?php class db { public function where() { //code here } public function order() { //code here } public function limit() { //code here } } index.php <?php $db = new db(); $db->where(); $db->order()

Struts2数据输入验证教程详解_java

一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我们怎么确定类型转换后的数据,是我们想要的数据呢?这里有点绕.你可以这样想:一个成年男子年龄是18岁,你现在想要得到18这个数据,但是,用户输入32,经过类型转换也是对的,但是数据不是你想要的.这时候,我们要怎么办?所以输入验证在这里就有用处了. 类型转换和输入验证的关系是:类型转换是输入验证的前提,