yii 查询构建器

查询构建器建立在 Database Access Objects 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。

yii\db\Query::select()

用来指定 SQL 语句当中的 SELECT 子句,入参是一个数组或者字符串,如果使用数组格式来指定字段,你可以使用数组的键值来表示字段的别名。默认是所有字段。很明显,使用数组是最好的方式,不妨让整个项目组都规定使用数组来指定字段,即使只有一个字段。数组名称最好还是 selectsQuery使yii\db\Query::distinct()distincthint使yii\db\Query::addSelect() selects数组的方式。

yii\db\Query::from()

yii\db\Query::from() 方法指定了 SQL 语句当中的 FROM 子句,可以通过字符串或者数组的形式来定义被查询的表名称。跟select()函数一样,建议使用数组的方式来统一开发。
使用Query时,也代表子查询,非常强悍的非常方便。

yii\db\Query::where()

还是跟上面一样,不过加多一种叫做操作符数组的东西。eg:

字符串格式,例如:'status=1'
哈希格式,例如: ['status' => 1, 'type' => 2]
操作符格式,例如:['like', 'name', 'test']

– 建议忘记字符串的方式
– 可以调用 yii\db\Query::params() 或者 yii\db\Query::addParams() 方法进行动态变量的绑定。
– 数组格式,应该是严格的哈希格式,并且所有条件为and连接,所有都是等值判断。
– 传入Query对象时,也代表子查询。
– 使用 yii\db\Query::andWhere() 或者 yii\db\Query::orWhere() 在原有条件的基础上 附加额外的条件。
– 可以使用可以使用 yii\db\Query::filterWhere() 来过滤空值,这样就不想要这么多if case语句。提示:当一个值为 null、空数组、空字符串或者一个只包含空白字符时,那么它将被判定为空值。

yii\db\Query::orderBy()

yii\db\Query::orderBy() 方法是用来指定 SQL 语句当中的 ORDER BY 子句的,参数形式跟上面一致,还是建议数组的方式。
这里涉及一个问题,前端页面的排序条件怎么直接反应给后台,而不用写太多代码呢?答案好像只能手写代码。哈哈…

yii\db\Query::groupBy()

yii\db\Query::having()

yii\db\Query::limit() 和 yii\db\Query::offset()

yii\db\Query::join()

yii\db\Query::join() 带有四个参数:

$type: 连接类型,例如:'INNER JOIN', 'LEFT JOIN'。
$table: 将要连接的表名称。
$on: 可选参数,连接条件,即 ON 子句。请查阅 where() 获取更多有关于条件定义的细节。
$params: 可选参数,与连接条件绑定的参数。

提供下面三个便利函数简化参数:

yii\db\Query::innerJoin()
yii\db\Query::leftJoin()
yii\db\Query::rightJoin()

使用join有一个问题后面需要好好理一理,avtiveRecord对象里面有hasOne和hasMany这两个函数,用于关联查询,啥情况下用他们啥时候自己写join 的 SQL语句呢?

yii\db\Query::union()

end


yii\db\Query 提供了一整套的用于不同查询目的的方法。

yii\db\Query::all(): 将返回一个由行组成的数组,每一行是一个由名称和值构成的关联数组(译者注:省略键的数组称为索引数组)。
yii\db\Query::one(): 返回结果集的第一行。
yii\db\Query::column(): 返回结果集的第一列。
yii\db\Query::scalar(): 返回结果集的第一行第一列的标量值。
yii\db\Query::exists(): 返回一个表示该查询是否包结果集的值。
yii\db\Query::count(): 返回 COUNT 查询的结果。
其它集合查询方法: 包括 yii\db\Query::sum(), yii\db\Query::average(), yii\db\Query::max(), yii\db\Query::min() 等. $q 是一个必选参数, 既可以是一个字段名称,又可以是一个 DB 表达式。

索引查询结果

非常有用的工能。
在调用 yii\db\Query::all() 之前使用 yii\db\Query::indexBy() ,可使用一个特定的字段或者表达式的值来作为索引结果集数组。
如需使用表达式的值做为索引,那么只需要传递一个匿名函数给 yii\db\Query::indexBy() 方法即可

批处理查询

当需要处理大数据的时候,像 yii\db\Query::all() 这样的方法就不太合适了, 因为它们会把所有数据都读取到内存上。为了保持较低的内存需求, Yii 提供了一个 所谓的批处理查询的支持。批处理查询会利用数据游标将数据以批为单位取出来。在数据系统里面,要生成很大的Excel文件的时候就可以采用这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值