Yii查询生成器(Query Builder)用法实例教程

PHP实例:Yii查询生成器(Query Builder)用法实例教程》要点:
本文介绍了PHP实例:Yii查询生成器(Query Builder)用法实例教程,希望对您有用。如果有疑问,可以联系我们。

PHP教程本文为yii官网英文文档的翻译版本,主要介绍了Yii查询生成器(Query Builder)的用法.分享给大家供大家参考之用.具体如下:

PHP教程首先,Yii的查询生成器提供了用面向对象的方式写sql语句.它允许开发人员使用类的方法属性来指定一个sql语句的各个部分.然后,组装成一个有效的sql语句,可以通过调用DAO数据拜访对象的描述方法为进一步执行.以下显示一个典型的使用查询生成器建立一个select语句:

PHP教程
$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();

PHP教程当你在应用程序中需要组装sql语句的程序,或基于一些条件逻辑时,最好使用查询生成器.使用查询生成器的好处主要包括

PHP教程①.它可以建立复杂的sql语句编程.

PHP教程②.它会自引用表名和列名防止sql保留字和特殊字符的冲突.

PHP教程③.它还可以引用参数值和使用参数绑定,这有助于减少sql注入攻击的风险.

PHP教程④.它提供了一定程度的数据库抽象,简化了迁移到不同的数据库平台的成本.

PHP教程它不强制使用查询生成器.事实上,如果你的查询是简单的,它是更容易和更快的直接写sql语句.

PHP教程注:查询生成器不能用于修改现有的查询指定为sql语句.例如,下面的代码将不能工作:

PHP教程
$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));

PHP教程换句话说,不要混合使用普通的sql查询生成器.

PHP教程1. 制备查询生成器(Preparing Query Builder)

PHP教程Yii的查询生成器是从 CDbCommand 提供主要数据库查询类,描述数据拜访对象.

PHP教程开始使用查询生成器,我们创造了 CDbCommand 的一个新实例,

PHP教程
$command = Yii::app()->db->createCommand();

PHP教程我们使用 Yii::app()->db 来获得数据库连接,然后调用 CDbConnection::createCommand() 创建所需的命令实例.

PHP教程请注意,将整个sql语句放入 createcommand(),叫做数据拜访对象,我们需呀把设置它为空.这是因为我们将在下面的解释中使用查询生成添加sql语句的各个部分的方法.

PHP教程2. 建立数据检索查询(Building Data Retrieval Queries)

PHP教程数据检索查询是指选择sql语句.查询生成器提供了一套办法来建立一个SELECT语句的各个部分.因为所有这些办法返回 CDbCommand 的实例,我们可以使用办法链调用他们,如图所示,在本节开头的例子.

PHP教程select():             指定查询的选择部分                       specifies the SELECT part of the query
selectdistinct():  指定查询不重复的选择部分               specifies the SELECT part of the query and turns on the disTINCT flag
from():              指定查询的FROM                           specifies the FROM part of the query
where():            指定查询的WHERE                        specifies the WHERE part of the query
andWhere():      用and的方式添加到WHERE的条件中  appends condition to the WHERE part of the query with AND operator
orWhere():        用or的方式添加到WHERE的条件中    appends condition to the WHERE part of the query with OR operator
join():               添加一个内部联接的查询片段            appends an inner join query fragment
leftJoin():          追加一个左外连接查询片段               appends a left outer join query fragment
rightJoin():        追加一个右外部联接查询片段            appends a right outer join query fragment
crossJoin():       追加一个交叉连接查询片段               appends a cross join query fragment
naturalJoin():     追加一个自然连接查询片段               appends a natural join query fragment
group():            指定查询的GROUP BY                   specifies the GROUP BY part of the query
having():           指定查询的HAVING                       specifies the HAVING part of the query
order():            指定查询的ORDER BY                    specifies the ORDER BY part of the query
limit():              指定查询的LIMIT                           specifies the LIMIT part of the query
offset():           指定查询的OFFSET                        specifies the OFFSET part of the query
union():           添加查询的UNION                          appends a UNION query fragment

PHP教程在下面,我们将解释如何使用这些查询生成器办法.为简单起见,我们假设底层数据库MysqL.注意:如果你使用的是其他数据库,表/列/值引用的例子可能是不同的.

PHP教程select()

PHP教程
function select($columns='*')

PHP教程该select()办法指定一个查询的选择部分.$columns参数指定要选择的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称.列的名称可以包含表的前缀和 / 或列别名.该办法将自动引用列名,除非一列包含一些括号(这意味着这个列是一个DB的表达式).

PHP教程下面是一些例子:

PHP教程
// SELECT *
select()
// SELECT `id`,`username`
select('id,username')
// SELECT `tbl_user`.`id`,`username` AS `name`
select('tbl_user.id,username as name')
// SELECT `id`,`username`
select(array('id','username'))
// SELECT `id`,count(*) as num
select(array('id','count(*) as num'))

PHP教程selectdistinct()

PHP教程
function selectdistinct($columns)

PHP教程selectdistinct()办法类似于select(),除了它打开了 disTINCT 的标志.例如,selectdistinct('id,用户名”)会产生以下sql

PHP教程
SELECT disTINCT `id`,`username`

PHP教程from()

PHP教程
function from($tables)

PHP教程from()办法指定来了一个查询的FROM部分. $tables 参数指定表的选择.这可以是一个字符串,用逗号分隔的表的名称,或表名数组.表的名称可以包含架构前缀(例如公共.tbl_user)和/或表的别名(e.g.tbl_user U).该办法将自动引用表的名称,除非它包含一些括号(即表是一个给定的子查询或DB的表达式).

PHP教程下面是一些例子:

PHP教程
// FROM `tbl_user`
from('tbl_user')
// FROM `tbl_user` `u`,`public`.`tbl_profile` `p`
from('tbl_user u,public.tbl_profile p')
// FROM `tbl_user`,`tbl_profile`
from(array('tbl_user','tbl_profile'))
// FROM `tbl_user`,(select * from tbl_profile) p
from(array('tbl_user','(select * from tbl_profile) p'))

PHP教程where()

PHP教程
function where($conditions,$params=array())

PHP教程where()办法指定查询的WHERE.$conditions 参数指定查询条件的同时,$params 指定参数绑定到整个查询.$conditions参数可以是一个字符串(例如id = 1)或一个数组中的格式:

PHP教程array(operator,operand1,operand2,...)
operator 可以是以下的任何一个

PHP教程①.and: operands 应该使用 and 连接在一起.例如,array('and','id=1','id=2') 将产生 id=1 AND id=2 .如果一个操作数是一个数组,它将使用这里描述的相同规则转换成一个字符串.例如,'type=1',array('or','id=2')) 将生成 type=1 AND (id=1 OR id=2).

PHP教程②.or: 类似 and 操作,除了operands 是使用 OR 连接的.

PHP教程③.in: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内.例如,array('in','id',array(1,2,3)) 将生成 id IN (1,3).

PHP教程④.not in: 类似 in 操作,除了用 NOT IN 代替 IN  去生成sql.

PHP教程⑤.like: operand 1 应是一个列或 DB 表达式,array('like','name','%tester%') 会生成 name LIKE '%tester%'.当规定值的范围为一个数组时,多个 LIKE 生成sql时会用 AND 连接.例如,array('%test%','%sample%')) 会生成 name LIKE '%test%' AND name LIKE '%sample%'.

PHP教程⑥.not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE  去生成sql.

PHP教程⑦.or like: 类似 like 的操作,除了多个 like 生成 sql 时用OR连接.

PHP教程⑧.or not like:  类似 not like 的操作,除了多个 like 生成 sql 时用OR连接.

PHP教程下面是一些例子,使用的地方:

PHP教程
// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2',array(':id1'=>1,':id2'=>2))
// WHERE id=1 OR id=2
where(array('or','id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and','type=2','type=3')))
// WHERE `id` IN (1,2)
where(array('in',2))
// WHERE `id` NOT IN (1,2)
where(array('not in',2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like','%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like',array('%Qiang','%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like','%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like','%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like',array('%Qiang%','%Xue%')))

PHP教程请注意,当操作者含有like时,我们必须明确指定的通配符(如%和_)的模式.如果参数是从用户的输入,我们也应该使用下面的代码转义特殊字符,以防止他们被当作通配符:

PHP教程
$keyword=$_GET['q'];
// escape % and _ characters
$keyword=strtr($keyword,array('%'=>'\%','_'=>'\_'));
$command->where(array('like','title','%'.$keyword.'%'));

PHP教程andWhere()

PHP教程
function andWhere($conditions,$params=array())

PHP教程用and 的方式添加到WHERE的条件中.此办法的行为几乎是 where() 相同,除了它只是添加条件不能取代它.在 where() 文档中有该办法参数的详细信息.

PHP教程orWhere()

PHP教程
function orWhere($conditions,$params=array())

PHP教程用 or 的方式添加到WHERE的条件中.此办法的行为几乎是 where() 相同,除了它只是添加条件不能取代它.在 where() 文档中有该办法参数的详细信息.

PHP教程order()

PHP教程
function order($columns)

PHP教程order() 办法指定查询的ORDER BY部分.$columns 参数指定列进行排序,这可以是一个包含用逗号分隔列和order的方向(ASC 或 DESC)的字符串,或者一个列和order的方向的数组.列名称可以包含表前缀.该办法将自动引用列名,除非一列包含一些括号(即给出一个 DB 表达式).

PHP教程下面是一些例子:

PHP教程
// ORDER BY `name`,`id` DESC
order('name,id desc')
// ORDER BY `tbl_profile`.`name`,`id` DESC
order(array('tbl_profile.name','id desc'))

PHP教程limit() and offset()

PHP教程
function limit($limit,$offset=null)
function offset($offset)

PHP教程limit()和offset()办法指定查询的 LIMIT 和 OFFSET 部分.请注意,某些DBMS不支持 LIMIT 和 OFFSET 语法.在这种情况下,查询生成器将改写整个sql语句来模拟 LIMIT 和 OFFSET 的功能.

PHP教程下面是一些例子:

PHP教程
// LIMIT 10  取前10条
limit(10)
// LIMIT 10 OFFSET 20  取到第21~30条
limit(10,20)
// OFFSET 20  去掉前20条后剩下的数据
offset(20)

PHP教程join() and its variants

PHP教程
function join($table,$conditions,$params=array())
function leftJoin($table,$params=array())
function rightJoin($table,$params=array())
function crossJoin($table)
function naturalJoin($table)

PHP教程join()办法及其变种指定如何与其他表连接,使用内部联接,左外连接,右外部联接,交叉连接,或自然连接. $table 参数指定要加入哪个表.表名可以包含数据库的前缀和 / 或别名.该办法将引用表名,除非它包含一个插入语,即一个DB表达式或子查询. $conditions 参数指定连接条件.它的语法与where() 相同.$params 参数指定绑定到整个查询的参数.

PHP教程值得注意的是,它不像其他的查询生成器办法,每次调用一个join办法都会追加到sql中.

PHP教程下面是一些例子:

PHP教程
// JOIN `tbl_profile` ON user_id=id
join('tbl_profile','user_id=id')
// LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND type=1
leftJoin('pub.tbl_profile p','p.user_id=id AND type=:type',array(':type'=>1))

PHP教程group()

PHP教程
function group($columns)

PHP教程group() 办法指定查询的GROUP BY. $columns 参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组.列名称可以包含表前缀.该办法将自动引用列名,除非一列包含一些括号(即是一个 DB 表达式).

PHP教程下面是一些例子:

PHP教程
// GROUP BY `name`,`id`
group('name,id')
// GROUP BY `tbl_profile`.`name`,`id`
group(array('tbl_profile.name','id'))

PHP教程having()

PHP教程
function having($conditions,$params=array())

PHP教程having() 办法指定查询的 HAVING.它的使用方式与 where() 相同.

PHP教程下面是一些例子:

PHP教程
// HAVING id=1 or id=2
having('id=1 or id=2')
// HAVING id=1 OR id=2
having(array('or','id=2'))

PHP教程union()

PHP教程
function union($sql)

PHP教程union() 办法指定查询 UNION.它使用UNION操作附加到现有的sql上.调用union()多次将现有的sql附加多个表.

PHP教程下面是一些例子:

PHP教程
// UNION (select * from tbl_profile)
union('select * from tbl_profile')

PHP教程执行查询(Executing Queries)

PHP教程调用上面查询生成器的方法来建立一个查询后,我们可以调用DAO方法数据拜访对象执行查询.例如,我们可以调用 CDbCommand::queryRow() 获得连续的结果,或者使用 CDbCommand::queryAll() 立刻得到所有行.

PHP教程例子:

PHP教程
$users = Yii::app()->db->createCommand()
  ->select('*')
  ->from('tbl_user')
  ->queryAll();

PHP教程检索表(Retrieving sqls)

PHP教程除了执行查询生成器的查询,我们也可以获取相应的sql语句.这可以通过调用 CDbCommand::getText() 获得.

PHP教程
$sql = Yii::app()->db->createCommand()
  ->select('*')
  ->from('tbl_user')
  ->text;

PHP教程如果有任何参数必须绑定到查询的,他们可以通过 CDbCommand::params 的属性绑定.

PHP教程建立查询的替代语法(Alternative Syntax for Building Queries)

PHP教程有时,使用办法链来建立一个查询可能不是最佳的选择.Yii的查询生成器允许使用对简单象属性赋值的方式去建立查询.特别是,每个查询生成器的办法都有一个具有相同名称属性.给属性赋值相当于调用相应的办法.例如,下面两个语句是等价的,假设$command 代表 CDbCommand 对象:

PHP教程
$command->select(array('id','username'));
$command->select = array('id','username');

PHP教程此外,CDbConnection::createCommand() 办法可以把一个数组作为参数.数组中的键值对将被用来初始化创建的 CDbCommand 实例的属性.这意味着,我们可以使用下面的代码来建立一个查询

PHP教程
$row = Yii::app()->db->createCommand(array(
  'select' => array('id','username'),'from' => 'tbl_user','where' => 'id=:id','params' => array(':id'=>1),))->queryRow();

PHP教程建立多个查询(Building Multiple Queries)

PHP教程一个 CDbCommand 实例可以重复使用多次建立几个查询.建立一个新的查询之前,需要调用 CDbCommand::reset() 办法以清理前面的查询.例子:

PHP教程
$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();

PHP教程3. 建立数据操作查询(Building Data Manipulation Queries)

PHP教程数据操作查询是指sql语句插入,更新和删除数据库表中的数据.对应于这些查询,查询生成器分别提供了插入,更新和删除的办法.不同于上面介绍 SELECT 的查询办法,这些数据操作查询办法将建立一个完整的sql语句,并立即执行.

PHP教程insert(): 将行插入到表
update(): 更新表中的数据
delete(): 从表中删除数据
下面描述了这些数据操作查询办法.

PHP教程insert()

PHP教程
function insert($table,$columns)

PHP教程insert()办法的建立和执行一条 INSERT sql 语句. $table 参数指定要插入的表,而键值对数组 $columns 指定要插入的列的值.该办法将转义表名,并且将与绑定参数结合使用.

PHP教程下面是一个例子:

PHP教程
// 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',));

PHP教程update()

PHP教程
function update($table,$columns,$conditions='',$params=array())

PHP教程update()办法的建立和执行一个sql更新语句. $table 参数指定要更新的表; $columns 是键值对的数组,用于指定要更新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE 语句中的 WHERE 子句.该办法将转义表名,并且将与要更新的值的参数结合使用.

PHP教程下面是一个例子:

PHP教程
// build and execute the following sql:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update('tbl_user',),'id=:id',array(':id'=>1));

PHP教程delete()

PHP教程
function delete($table,$params=array())

PHP教程delete()办法的建立和执行一个sql删除语句. $table 参数指定要删除数据的表;$conditions 和$params像where()一样,指定 DELETE 语句中的 WHERE 子句.该办法将正确转义表名.

PHP教程下面是一个例子:

PHP教程
// build and execute the following sql:
// DELETE FROM `tbl_user` WHERE id=:id
$command->delete('tbl_user',array(':id'=>1));

PHP教程4. 建立架构操作查询(Building Schema Manipulation Queries)

PHP教程除了正常的数据检索和操作查询,查询生成器提供了一套用于可以把持数据库的构建和执行SQL查询方法.它支持以下操作:

PHP教程createTable(): 创建一个
renaMetable(): 重命名
dropTable(): 删除一个
truncateTable(): 截断一个表,即删除表中的所有数据但不删除表本身
addColumn(): 给表添加
renameColumn(): 重命名表中的列
alterColumn(): 改变一个表的列
addForeignKey(): 添加一个外键(自1.1.6可用)
dropForeignKey(): 删除一个外键(自1.1.6可用)
dropColumn(): 删除一个表的列
createIndex(): 创建一个索引
dropIndex(): 删除一个索引

PHP教程Info: 虽然在不同的数据库管理系统中sql语句操作数据库的模式有很大的不同,但查询生成器试图提供一个统一的接口,用于构建这些查询.这简化了数据库迁移从一个数据库管理系统到另一个任务.

PHP教程抽象数据类型 Abstract Data Types

PHP教程查询生成器中引入了一组可以在定义表的列中使用抽象数据类型.与物理数据类型不同,物理数据类型有具体独特的DBMS而且在不同的DBMS中有很大的不同,抽象数据类型都是独立的DBMS.当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的物理数据类型.

PHP教程下面的抽象数据类型由查询生成器的支持.

PHP教程pk: 一个通用的主键类型,将被转换成 int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY for MysqL;
string: 字符串类型,将被转换成 varchar(255) for MysqL;
text: 文本型(长字符串),将被转换成 text for MysqL;
integer: 整数类型,将被转换成 int(11) for MysqL;
float: 浮点数类型,将被转换成 float for MysqL;
decimal: 十进制数类型,将被转换成 decimal for MysqL;
datetime: datetime类型,将被转换成 datetime for MysqL;
timestamp: 时间戳类型,将被转换成 timestamp for MysqL;
time: 时间类型,将被转换成 time for MysqL;
date: 日期类型,将被转换成 date for MysqL;
binary: 二进制数据类型,将被转换成 blob for MysqL;
boolean: 布尔类型,将被转换成 tinyint(1) for MysqL;
money: 金钱/货币型,将被转换成 decimal(19,4) for MysqL. 自1.1.8版本开始此类型可以使用.

PHP教程createTable()

PHP教程
function createTable($table,$options=null)

PHP教程createTable() 办法构建和执行一条创建表的sql语句.$table 参数指定要创建的表的名称. $columns 参数指定在新表中的列.他们必须被指定为名称类型的键值对(e.g. 'username'=>'string'). $options 参数指定应附加到生成sql上的任何额外的sql片段.查询生成器将正确的引用的表名以及列名.

PHP教程当指定一个列的定义时,可以使用如上所述的抽象数据类型.查询生成器会根据当前使用的数据库管理系统的抽象数据类型转换成相应的物理数据类型.例如,string 类型将被转换为MysqL的 varchar(255).

PHP教程一个列定义还可以包含非抽象数据类型或规格.他们将没有任何改变的被放置在生成sql中.例如,point 不是一个抽象数据类型,如果用在列定义,它会出现在生成sql中,而且 string NOT NULL将被转换varchar(255) NOT NULL(即只有抽象类型的字符串转换).

PHP教程下面是一个例子,显示了如何创建一个表:

PHP教程
// CREATE TABLE `tbl_user` (
//   `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,//   `username` varchar(255) NOT NULL,//   `location` point
// ) ENGINE=InnoDB
createTable('tbl_user',array(
  'id' => 'pk','username' => 'string NOT NULL','location' => 'point','ENGINE=InnoDB')

PHP教程renaMetable()

PHP教程
function renaMetable($table,$newName)

PHP教程renaMetable() 办法创建和执行一条重命名表名的sql语句. $table 参数指定要重命名的表的名称. $newName 参数指定表的新名称.查询生成器将正确引用的表名.

PHP教程下面是一个示例,演示了如何重命名表:

PHP教程
// RENAME TABLE `tbl_users` TO `tbl_user`
renaMetable('tbl_users','tbl_user')

PHP教程dropTable()

PHP教程
function dropTable($table)

PHP教程dropTable() 办法创建和执行一条删除表的sql语句.在$table 参数指定要删除的表的名称.查询生成器会正确地引用的表名.

PHP教程下面是一个示例展示如何删除一个表:

PHP教程
// DROP TABLE `tbl_user`
dropTable('tbl_user')

PHP教程truncateTable()

PHP教程
function truncateTable($table)

PHP教程truncateTable() 办法建立和执行一条清空表数据的sql语句. $table 参数指定清空的表名.查询生成器会正确地引用的表名.

PHP教程下面是一个示例显示如何清空表:

PHP教程
// TruncATE TABLE `tbl_user`
truncateTable('tbl_user')

PHP教程addColumn()

PHP教程
function addColumn($table,$column,$type)

PHP教程addColumn() 办法创建并执行一条添加一个表的新列的sql语句. $table 参数指定新列将被添加到的表的名称. $column 参数指定新列的名称. $type 指定新列的定义.列定义中可以包含抽象数据类型,如 "createTable"小节中的描述.查询生成器将正确的引用的表名以及列名.

PHP教程下面是一个示例,演示如何添加一个表的列:

PHP教程
// ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL
addColumn('tbl_user','email','string NOT NULL')

PHP教程dropColumn()

PHP教程
function dropColumn($table,$column)

PHP教程dropColumn() 办法创建和执行一条删除表列的sql语句. $table 参数指定要被删除的列所属的表名. $column 参数指定要被删除的列名.查询生成器将正确地引用的表名以及列名.

PHP教程下面是一个示例展示如何删除一个表列:

PHP教程
// ALTER TABLE `tbl_user` DROP COLUMN `location`
dropColumn('tbl_user','location')

PHP教程renameColumn()

PHP教程
function renameColumn($table,$name,$newName)

PHP教程renameColumn() 办法创建和执行一条重命名列的sql语句. $table 参数指定要重命名的列所属的表的名称. $name 参数指定的旧列名. $newName 指定新的列名.查询生成器将正确地引用的表名以及列名.

PHP教程下面是一个示例,展示了如何重命名表列:

PHP教程
// ALTER TABLE `tbl_users` CHANGE `name` `username` varchar(255) NOT NULL
renameColumn('tbl_user','username')

PHP教程alterColumn()

PHP教程
function alterColumn($table,$type)

PHP教程alterColumn() 办法创建和执行一条修改表列的sql语句. $table 参数指定要被改变的列所属的表的名称. $column 参数指定被改变的列的名称.$type 指定列的新定义.列定义中可以包含抽象数据类型,展示了如何更改一个表列:

PHP教程
// ALTER TABLE `tbl_user` CHANGE `username` `username` varchar(255) NOT NULL
alterColumn('tbl_user','username','string NOT NULL')

PHP教程addForeignKey()

PHP教程
function addForeignKey($name,$table,$refTable,$refColumns,$delete=null,$update=null)

PHP教程addForeignKey() 办法创建和执行一条添加一个外键约束sql语句. $name 参数指定外键的名称. $table 和 $columns 参数指定外键的表名和列名.如果有多个列,他们应该用逗号字符分隔. $refTable 和 $refColumns 参数指定表名和列名的外键引用. $delete 和 $update 参数指定 sql语句中的 ON DELETE 和ON UPDATE选项.大多数的DBMS都支持这些选项:RESTRICT,CASCADE,NO ACTION,SET DEFAULT,SET NULL. .查询生成器会正确地引用表名,索引名和列名.

PHP教程下面是一个示例,演示如何添加一个外键约束:

PHP教程
// ALTER TABLE `tbl_profile` ADD CONSTRAINT `fk_profile_user_id`
// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
// ON DELETE CASCADE ON UPDATE CASCADE
addForeignKey('fk_profile_user_id','tbl_profile','user_id','tbl_user','CASCADE','CASCADE')

PHP教程dropForeignKey()

PHP教程
function dropForeignKey($name,$table)

PHP教程dropForeignKey() 办法创建和执行一条删除一个外键约束的sql语句. $name 参数指定的要删除的外键约束的名称. $table 参数指定外键所属的表的名称.查询生成器将正确地引用的表名以及约束名称.

PHP教程下面是一个示例,显示了如何删除外键约束:

PHP教程
// ALTER TABLE `tbl_profile` DROP FOREIGN KEY `fk_profile_user_id`
dropForeignKey('fk_profile_user_id','tbl_profile')

PHP教程createIndex()

PHP教程
function createIndex($name,$unique=false)

PHP教程createIndex() 办法构建和执行一条创建索引的sql语句. $name 参数指定要创建的索引的名称.$table 参数指定索引所属的表的名称.$column 参数指定要索引的列的名称. $unique 参数指定是否创建一个唯一索引.如果索引由多个列,则必须用逗号将它们隔开.查询生成器会正确地引用表名,显示了如何创建索引:

PHP教程
// CREATE INDEX `idx_username` ON `tbl_user` (`username`)
createIndex('idx_username','username')

PHP教程dropIndex()

PHP教程
function dropIndex($name,$table)

PHP教程dropIndex() 办法创建和执行一条删除索引的sql语句. $name 参数指定要删除的索引的名称.$table 参数指定索引所属的表的名称.查询生成器将正确地引用的表名以及索引名称.

PHP教程下面是一个示例,显示了如何删除索引:

PHP教程
// DROP INDEX `idx_username` ON `tbl_user`
dropIndex('idx_username','tbl_user')

PHP教程希望本文所述对大家yii学习有所赞助.

PHP实例:Yii查询生成器(Query Builder)用法实例教程》是否对您有启发,欢迎查看更多与《PHP实例:Yii查询生成器(Query Builder)用法实例教程》相关教程,学精学透。编程之家 jb51.cc为您提供精彩教程。

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...