本文由Yii官方网站尚未汉化的the definitive guide to Yii翻译而来,译文为原创,转载请标注本博客地址。
英文版原文地址
查询生成器(Query Builder)
Yii的查询生成器提供了一种基于面向对象的办法来生成SQL查询。它允许开发者使用类的方法和属性来有针对性地制定SQL语句的各个单独部分。然后这个类就会将开发者定义的SQL的不同的部分组装起来形成SQL语句,并通过调用DAO的方法来执行SQL查询。下面是一个典型的使用查询生成器来生成select语句的例子:
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
当你需要针对SQL语句的各个部分进行组装,或者在你的应用中需要基于某些条件性的逻辑来生成SQL语句的时候,上面的例子就能够很好地帮助你摆平这些。使用查询生成器来生成SQL语言能给你带来的主要好处包括:
1、它允许你程序化地生成复杂的SQL语句。
2、它能够自动给表名和列名做一些处理,来防止因SQL的保留字和特殊字符带来的冲突。
3、它也能尽可能地处理参数的值和使用参数绑定,这样能够对防止SQL注入攻击起到一些帮助作用。
4、它对数据库的严格抽象可以简化app在不同数据库平台上的迁移工作。
我们并不是强制性地要求使用查询生成器。事实上,如果你的查询十分简单,直接把SQL写出来会更加容易,而且程序执行得更快。
注意:查询生成器并不能够修改一个现有的SQL语句。比如说下面的这些用法并不能够起作用:
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// the following line will NOT append WHERE clause to the above SQL
$command->where('id=:id', array(':id'=>$id));
也就是说,不要把纯SQL语句和查询生成器混在一起。
1、准备工作
Yii的查询生成器是由CDbCommand这个类来提供的,在Data Access Objects的描述中,它是一个主要用来查询数据库的类。
下面,我们就来创建一个关于CDbCommand类的实例来开始使用我们的查询生成器:
$command = Yii::app()->db->createCommand();
我们使用Yii::app()->db来获得数据库链接,然后再调用CDbCommand::createCommand() 来创建我们需要的查询命令。
看到了吧,跟我们在Data Access Objects中描述的不一样.因为接下来我们将要使用查询生成器来生成SQL查询语句的各个部分,所以现在调用createCommand的时候并没有给他提供SQL查询语句,后面我们将要解释如何使用查询生成器来生成SQL语句。
本文由Yii官方网站尚未汉化的the definitive guide to Yii翻译而来,译文为原创,转载请标注本博客地址。