group() 方法指定查询的GROUP BY。 $columns 参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即是一个 DB 表达式)。
下面是一些例子:
// GROUP BY `name`, `id` group('name, id') // GROUP BY `tbl_profile`.`name`, `id` group(array('tbl_profile.name', 'id'))
having()
function having($conditions, $params=array())
having() 方法指定查询的 HAVING。它的使用方式与 where() 相同。
下面是一些例子:
// HAVING id=1 or id=2 having('id=1 or id=2') // HAVING id=1 OR id=2 having(array('or', 'id=1', 'id=2'))
union()
function union($sql)
union() 方法指定查询 UNION。它使用UNION操作附加到现有的SQL上。调用union()多次将现有的SQL附加多个表。
下面是一些例子:
// UNION (select * from tbl_profile) union('select * from tbl_profile')
执行查询(Executing Queries)
调用上面查询生成器的方法来建立一个查询后,我们可以调用DAO方法数据访问对象执行查询。例如,我们可以调用 CDbCommand::queryRow() 获得连续的结果,或者使用 CDbCommand::queryAll() 立刻得到所有行。
例子:
$users = Yii::app()->db->createCommand() ->select('*') ->from('tbl_user') ->queryAll();
检索表(Retrieving SQLs)
除了执行查询生成器的查询,我们也可以获取相应的SQL语句。这可以通过调用 CDbCommand::getText() 获得。
$sql = Yii::app()->db->createCommand() ->select('*') ->from('tbl_user') ->text;
如果有任何参数必须绑定到查询的,他们可以通过 CDbCommand::params 的属性绑定。
建立查询的替代语法(Alternative Syntax for Building Queries)
有时,使用方法链来建立一个查询可能不是最佳的选择。Yii的查询生成器允许使用对简单象属性赋值的方式去建立查询。特别是,每个查询生成器的方法都有一个具有相同名称的属性。给属性赋值相当于调用相应的方法。例如,下面两个语句是等价的,假设$command 代表 CDbCommand 对象:
$command->select(array('id', 'username')); $command->select = array('id', 'username');
此外, CDbConnection::createCommand() 方法可以把一个数组作为参数。数组中的键值对将被用来初始化创建的 CDbCommand 实例的属性。这意味着,我们可以使用下面的代码来建立一个查询:
$row = Yii::app()->db->createCommand(array( 'select' => array('id', 'username'), 'from' => 'tbl_user', 'where' => 'id=:id', 'params' => array(':id'=>1), ))->queryRow();
建立多个查询(Building Multiple Queries)
一个 CDbCommand 实例可以重复使用多次建立几个查询。建立一个新的查询之前,需要调用 CDbCommand::reset() 方法以清理前面的查询。例子:
$command = Yii::app()->db->createCommand(); $users = $command->select('*')->from('tbl_users')->queryAll(); $command->reset(); // clean up the previous query $posts = $command->select('*')->from('tbl_posts')->queryAll();
3. 建立数据操作查询(Building Data Manipulation Queries)
数据操作查询是指SQL语句插入,更新和删除数据库表中的数据。对应于这些查询,查询生成器分别提供了插入,更新和删除的方法。不同于上面介绍 SELECT 的查询方法,这些数据操作查询方法将建立一个完整的SQL语句,并立即执行。
insert(): 将行插入到表
update(): 更新表中的数据
delete(): 从表中删除数据
下面描述了这些数据操作查询方法。
insert()
function insert($table, $columns)
insert()方法的建立和执行一条 INSERT SQL 语句。 $table 参数指定要插入的表,而键值对数组 $columns 指定要插入的列的值。该方法将转义表名,并且将与绑定参数结合使用。
下面是一个例子:
// build and execute the following SQL: // INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email) $command->insert('tbl_user', array( 'name'=>'Tester', 'email'=>'tester@example.com', ));
update()
function update($table, $columns, $conditions='', $params=array())
update()方法的建立和执行一个SQL更新语句。 $table 参数指定要更新的表; $columns 是键值对的数组,用于指定要更新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE 语句中的 WHERE 子句。该方法将转义表名,并且将与要更新的值的参数结合使用。
下面是一个例子: