您的位置:首页 > 编程语言 > PHP开发

yii 查询构建器

2016-04-10 21:17 786 查看
查询构建器建立在 Database Access Objects 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。

yii\db\Query::select()

用来指定 SQL 语句当中的 SELECT 子句,入参是一个数组或者字符串,如果使用数组格式来指定字段,你可以使用数组的键值来表示字段的别名。默认是所有字段。很明显,使用数组是最好的方式,不妨让整个项目组都规定使用数组来指定字段,即使只有一个字段。数组名称最好还是selects。–支持子查询,往数组传Query对象即可。–使用yii\db\Query::distinct()函数来添加distinct关键字。–不过不知道怎么最佳hint关键字?–可使用调用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文件的时候就可以采用这个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii