95992828九五至尊2

用法实例教程882828九五至尊手机版,查询生成器

二月 2nd, 2019  |  882828九五至尊手机版

原稿地址:http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder

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

不过原文是英文的,Yii的官网没有翻译这一章,自己就尝试着翻译了须臾间,有成百上千地点时会按自己的知情写,不自然完全按原文翻译。。。

率先,Yii的询问生成器提供了用面向对象的主意写SQL语句。它同意开发人士使用类的法门和质量来指定一个SQL语句的逐一部分。然后,组装成一个行之有效的SQL语句,可以透过调用DAO数据访问对象的描述方法为更加推行。以下展现了一个非凡的应用查询生成器建立一个select语句:

Yii的询问生成器提供了用面向对象的措施写SQL语句。它同意开发人士使用类的艺术和特性来指定一个SQL语句的顺序部分。然后,组装成一个可行的SQL语句,可以因此调用DAO数据访问对象的叙述方法为越发推行。以下突显了一个压倒元白的运用查询生成器建立一个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();
$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语句编程。

  • 它能够建立复杂的SQL语句编程。

  • 它会自引用表名和列名防止SQL保留字和特殊字符的争论。

  • 它还是能引用参数值和动用参数绑定,那有助于削减SQL注入攻击的风险。

  • 它提供了迟早程度的数据库抽象,简化了搬迁到区其余数据库平台的费用。

②.它会自引用表名和列名幸免SQL保留字和特殊字符的冲突。

它不强制行使查询生成器。事实上,如若你的查询是简不难单的,它是更便于和更快的直接写SQL语句。

③.它还足以引用参数值和选取参数绑定,这有助于裁减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语句。

换句话说,不要混合使用普通的SQL和查询生成器。

注:查询生成器不能用来修改现有的查询指定为SQL语句。例如,下边的代码将不可能干活:

1. 筹备查询生成器(Preparing Query Builder)

Yii的询问生成器是从
CDbCommand 提供紧要数据库查询类,描述数据访问对象。

发轫使用查询生成器,大家创立了 CDbCommand 的一个新实例,

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

我们选取 Yii::app()->db 来得到数据库连接,然后调用 CDbConnection::createCommand() 创制所需的授命实例。

请小心,将一切SQL语句放入 createcommand()
,叫做数据访问对象,大家需呀把设置它为空。那是因为大家将在上边的分解中应用查询生成器添加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));

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

数据检索查询是指接纳SQL语句。查询生成器提供了一套方法来树立一个SELECT语句的次第部分。因为具有那个方法重临 CDbCommand 的实例,大家得以行使格局链调用他们,如图所示,在本节起先的事例。

  • 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

在底下,大家将表明什么使用这么些查询生成器方法。为简易起见,大家只要底层数据库是MySQL。注意:借使你拔取的是其他数据库,表/列/值引用的事例可能是差距的。

换句话说,不要混合使用普通的SQL和询问生成器。

select()

function select($columns='*')

该select()方法指定一个查询的挑选部分。$columns参数指定要选择的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称。列的称号可以包涵表的前缀和
/
或列别名。该措施将电动引用列名,除非一列包括部分括号(这象征那么些列是一个DB的表明式)。

下边是局地事例:

// 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'))

1. 筹备查询生成器(Preparing Query Builder)

selectDistinct()

function selectDistinct($columns)

selectdistinct()方法类似于select(),除了它开辟了 DISTINCT 的标志。例如,selectdistinct(’id,用户名”)会时有发生以下SQL:

SELECT DISTINCT `id`, `username`

Yii的询问生成器是从 CDbCommand 提供至关紧要数据库查询类,描述数据访问对象。

from()

function from($tables)

from()方法指定来了一个询问的FROM部分。 $tables 参数指定表的选料。那可以是一个字符串,用逗号分隔的表的称号,或表名数组。表的称呼能够分包架构前缀(例如公共。tbl_user)和/或表的别名(e.g.tbl_user
U)。该形式将自动引用表的称呼,除非它含有部分括号(即表是一个加以的子查询或DB的表达式)。

上边是有些例子:

// 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'))

发端采纳查询生成器,大家创立了 CDbCommand 的一个新实例,

where()

function where($conditions, $params=array())

where()方法指定询问的WHERE。$conditions 参数指定询问条件的还要,$params
指定参数绑定到全部查询。$conditions参数可以是一个字符串(例如id = 1)或一个数组中的格式:

array(operator, operand1, operand2, ...)

operator 可以是以下的其他一个:

  • and: operands 应该运用
    and 连接在一块儿。例如, array('and', 'id=1', 'id=2')将生出 id=1
    AND
    id=2 。如果一个操作数是一个数组,它将应用那里描述的一律规则转换成一个字符串。例如,array(‘and’,
    ‘type=1’, array(‘or’, ‘id=1’,
    ‘id=2’)) 将生成 type=1 AND (id=1 OR id=2)

  • or: 类似 and 操作,除了operands 是使用 OR 连接的。

  • in: operand 1 应是一个列或 DB 表达式,而 operand
    2 是代表值的限定的数组,列或 DB
    表明式应在那些数组的范围内。例如,array('in', 'id', array(1,2,3)) 将生成 id IN (1,2,3)

  • not in: 类似 in 操作,除了用 NOT IN 代替 IN  去生成SQL。

  • like: operand 1 应是一个列或 DB 表达式,而 operand
    2 是代表值的范围的数组,列或 DB
    表明式应在那几个数组的限制内。例如,array('like', 'name', '%tester%') 会生成 name LIKE '%tester%'。当确定值的界定为一个数组时,五个LIKE 生成SQL时会用 AND
    连接。例如,array('like', 'name', array('%test%', '%sample%')) 会生成 name LIKE '%test%' AND name LIKE '%sample%'

  • not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE  去生成SQL。

  • or like: 类似 like 的操作,除了多少个 like 生成 SQL 时用OR连接。

  • or not like:  类似 not like 的操作,除了八个 like 生成 SQL
    时用OR连接。

下边是局地事例,使用的地点:

// 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=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))

请留意,当操小编含有like时,我们必须明确指定的通配符(如%和_)的方式。倘使参数是从用户的输入,大家也理应利用上边的代码转义特殊字符,以幸免他们被当作通配符:

$keyword=$_GET['q'];
// escape % and _ characters
$keyword=strtr($keyword, array('%'=>'\%', '_'=>'\_'));
$command->where(array('like', 'title', '%'.$keyword.'%'));
$command = Yii::app()->db->createCommand();

andWhere()

function andWhere($conditions, $params=array())

用 and 的点子丰盛到WHERE的规则中。此方式的一颦一笑大概是 where()
相同,除了它只是增进条件无法代替它。在 where() 文档中有该办法参数的详细音信。

我们选拔 Yii::app()->db 来得到数据库连接,然后调用
CDbConnection::createCommand() 创立所需的通令实例。

orWhere()

function orWhere($conditions, $params=array())

用 or 的法门充裕到WHERE的规范中。此方法的行为几乎是 where()
相同,除了它只是充分条件无法替代它。在 where() 文档中有该格局参数的详细音讯。

请小心,将全部SQL语句放入 createcommand()
,叫做数据访问对象,大家需呀把设置它为空。那是因为大家将在下边的演说中利用查询生成器添加SQL语句的相继部分的措施。

order()

function order($columns)

order() 方法指定询问的ORDER
BY部分。$columns 参数指定列进行排序,那足以是一个富含用逗号分隔列和order的大方向(ASC 或 DESC)的字符串,或者一个列和order的取向的数组。列名称能够涵盖表前缀。该方式将自行引用列名,除非一列包括部分括号(即给出一个 DB 表明式)。

上面是局地事例:

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

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

limit() and offset()

function limit($limit, $offset=null)
function offset($offset)

limit()和offset()方法指定询问的 LIMIT 和 OFFSET部分。请注意,某些DBMS不支持 LIMIT 和 OFFSET语法。在那种情况下,查询生成器将改写整个SQL语句来模拟 LIMIT 和 OFFSET 的功能。

上面是部分事例:

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

数据检索查询是指选用SQL语句。查询生成器提供了一套方法来确立一个SELECT语句的顺序部分。因为所有这几个点子再次回到CDbCommand
的实例,大家可以运用格局链调用他们,如图所示,在本节开头的事例。

join() and its variants

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

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

值得注意的是,它不像其余的查询生成器方法,每便调用一个join方法都会大增到SQL中。

下边是局地例子:

// 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))

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

group()

function group($columns)

group() 方法指定询问的GROUP
BY。 $columns 参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组。列名称可以涵盖表前缀。该措施将机关引用列名,除非一列包涵部分括号(即是一个
DB 表明式)。

上面是部分事例:

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

在上边,大家将分解什么使用这么些查询生成器方法。为简便起见,大家如若底层数据库是MySQL。注意:如若您利用的是其余数据库,表/列/值引用的例证可能是例外的。

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'))

select()

union()

function union($sql)

union() 方法指定询问
UNION。它接纳UNION操作附加到存活的SQL上。调用union()很多次将现有的SQL附加两个表。

上边是局地例子:

// UNION (select * from tbl_profile)
union('select * from tbl_profile')
function select($columns='*')

实践查询(Executing Queries)

调用上边查询生成器的章程来确立一个查询后,大家得以调用DAO方法数据访问对象执行查询。例如,大家可以调用 CDbCommand::queryRow() 得到一连的结果,或者利用 CDbCommand::queryAll() 马上获得所有行。

例子:

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

该select()方法指定一个询问的接纳部分。$columns参数指定要拔取的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称。列的称呼可以涵盖表的前缀和
/
或列别名。该情势将活动引用列名,除非一列包涵部分括号(那意味着那几个列是一个DB的表明式)。

检索表(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();
// 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'))

树立两个查询(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();

selectDistinct()

3. 建立数量操作查询(Building Data Manipulation Queries)

数据操作查询是指SQL语句插入,更新和删除数据库表中的数目。对应于这一个查询,查询生成器分别提供了插入,更新和删除的格局。不一致于上边介绍 SELECT
的询问艺术,那些多少操作查询格局将确立一个完好无缺的SQL语句,并当即执行。

上边描述了那么些数据操作查询格局。

function selectDistinct($columns)

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',
));

selectdistinct()方法类似于select(),除了它打开了 DISTINCT
的表明。例如,selectdistinct(’id,用户名”)会爆发以下SQL:

update()

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

update()方法的创立和实施一个SQL更新语句。 $table 参数指定要翻新的表; $columns 是键值对的数组,用于指定要翻新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE
语句中的 WHERE
子句。该方式将转义表名,并且将与要立异的值的参数结合使用。

上边是一个例证:

// build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update('tbl_user', array(
    'name'=>'Tester',
), 'id=:id', array(':id'=>1));
SELECT DISTINCT `id`, `username`

delete()

function delete($table, $conditions='', $params=array())

delete()方法的创立和进行一个SQL删除语句。 $table 参数指定要刨除数据的表;$conditions 和$params像where()一样,指定
DELETE 语句中的 WHERE 子句。该措施将正确转义表名。

上面是一个事例:

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

from()

4. 确立架构操作查询(Building Schema Manipulation Queries)

而外健康的数据检索和操作查询,查询生成器提供了一套用于可以决定数据库的营造和实践SQL查询的法门。它协理以下操作:

Info: 即使在不一致的数据库管理连串中SQL语句操作数据库的方式有很大的不等,但询问生成器试图提供一个联合的接口,用于创设那么些查询。这简化了数据库迁移从一个数据库管理连串到另一个义务。

function from($tables)

抽象数据类型 Abstract Data Types

询问生成器中引入了一组可以在定义表的列中使用抽象数据类型。与物理数据类型不一样,物理数据类型有具体独特的DBMS而且在分歧的DBMS中有很大的分化,抽象数据类型都是单独的DBMS。当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的情理数据类型。 

下边的抽象数据类型由询问生成器的支持。 

  • 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本子开头此类型可以使用。

from()方法指定来了一个询问的FROM部分。 $tables
参数指定表的挑三拣四。那足以是一个字符串,用逗号分隔的表的名目,或表名数组。表的名号可以涵盖架构前缀(例如公共。tbl_user)和/或表的别名(e.g.tbl_user
U)。该方法将自动引用表的称号,除非它含有部分括号(即表是一个加以的子查询或DB的表明式)。

createTable()

function createTable($table, $columns, $options=null)

 createTable() 方法打造和实施一条成立表的SQL语句。$table 参数指定要创制的表的名称。 $columns 参数指定在新表中的列。他们不可以不被指定为名称类型的键值对(e.g. 'username'=>'string')。 $options 参数指定应附加到变化的SQL上的其余附加的SQL片段。查询生成器将正确的引用的表名以及列名。

当指定一个列的定义时,可以选用如上所述的抽象数据类型。查询生成器会依照当下选拔的数据库管理种类的抽象数据类型转换成相应的情理数据类型。例如,string 类型将被转换为MySQL的 varchar(255)。

一个列定义仍可以涵盖非抽象数据类型或标准。他们将没有其余改动的被停放在转移的SQL中。例如,point不是一个抽象数据类型,尽管用在列定义,它会现身在变更的SQL中,而且 string NOT NULL将被转移varchar(255)
NOT NULL(即唯有空虚类型的字符串转换)。

下边是一个例证,突显了怎么着创立一个表:

// 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')

上面是一些例证:

renameTable()

function renameTable($table, $newName)

renameTable() 方法创立和施行一条重命名表名的SQL语句。 $table 参数点名要重命名的表的称谓。 $newName 参数指定表的新名称。查询生成器将科学引用的表名。

上面是一个示范,演示了何等重命名表:

// RENAME TABLE `tbl_users` TO `tbl_user`
renameTable('tbl_users', 'tbl_user')
// 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'))

dropTable()

function dropTable($table)

dropTable() 方法创制和实施一条删除表的SQL语句。在$table 参数指定要刨除的表的称呼。查询生成器会正确地引用的表名。

上边是一个演示浮现如何删除一个表:

// DROP TABLE `tbl_user`
dropTable('tbl_user')

where()

truncateTable()

function truncateTable($table)

truncateTable() 方法制造和执行一条清空表数据的SQL语句。 $table 参数点名清空的表名。查询生成器会正确地引用的表名。

上面是一个示范突显怎么清空表:

// TRUNCATE TABLE `tbl_user`
truncateTable('tbl_user')
function where($conditions, $params=array())

addColumn()

function addColumn($table, $column, $type)

addColumn() 方法创立并推行一条添加一个表的新列的SQL语句。 $table 参数指定新列将被添加到的表的称呼。 $column 参数指定新列的名称。 $type 指定新列的概念。列定义中得以包含抽象数据类型,如 “createTable”小节中的描述。查询生成器将正确的引用的表名以及列名。

上面是一个演示,演示如何添加一个表的列:

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

where()方法指定询问的WHERE。$conditions 参数指定询问条件的同时,$params
指定参数绑定到全方位查询。$conditions参数可以是一个字符串(例如id =
1)或一个数组中的格式:

dropColumn()

function dropColumn($table, $column)

dropColumn() 方法创设和举办一条删除表列的SQL语句。 $table 参数点名要被删除的列所属的表名。 $column 参数指定要被删去的列名。查询生成器将科学地引用的表名以及列名。

上边是一个示范体现什么删除一个表列:

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

array(operator, operand1, operand2, …)
operator 可以是以下的别的一个:

renameColumn()

function renameColumn($table, $name, $newName)

renameColumn() 方法创造和实施一条重命名列的SQL语句。 $table 参数点名要重命名的列所属的表的称号。 $name 参数指定的旧列名。 $newName 指定新的列名。查询生成器将科学地引用的表名以及列名。

上边是一个示范,体现了怎么重命名表列:

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

①.and: operands 应该利用 and 连接在一起。例如, array(‘and’, ‘id=1’,
‘id=2’) 将时有发生 id=1 AND id=2
。要是一个操作数是一个数组,它将利用那里描述的相同规则转换成一个字符串。例如,array(‘and’,
‘type=1’, array(‘or’, ‘id=1’, ‘id=2’)) 将转移 type=1 AND (id=1 OR
id=2)。

alterColumn()

function alterColumn($table, $column, $type)

alterColumn() 方法创建和推行一条修改表列的SQL语句。 $table 参数点名要被更改的列所属的表的称号。 $column 参数指定被改成的列的名称。$type 指定列的新定义。列定义中得以蕴含抽象数据类型,如 “createTable”小节中的描述。查询生成器将科学的引用的表名以及列名。

上面是一个演示,体现了怎么改变一个表列:

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

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

addForeignKey()

function addForeignKey($name, $table, $columns,
    $refTable, $refColumns, $delete=null, $update=null)

addForeignKey() 方法创制和执行一条添加一个外键约束SQL语句。 $name 参数指定外键的名目。 $table 和 $columns 参数指定外键的表名和列名。要是有多少个列,他们应有用逗号字符分隔。 $refTable 和 $refColumns 参数指定表名和列名的外键引用。 $delete 和 $update 参数指定
SQL语句中的 ON DELETE 和ON
UPDATE选项。半数以上的DBMS都帮助那几个选拔:RESTRICTCASCADENO ACTIONSET DEFAULTSET NULL. 。查询生成器会正确地引用表名,索引名和列名。

上边是一个示范,演示如何添加一个外键约束:

// 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', 'id', 'CASCADE', 'CASCADE')

③.in: operand 1 应是一个列或 DB 表明式,而 operand 2
是代表值的限量的数组,列或 DB
表达式应在这些数组的限定内。例如,array(‘in’, ‘id’, array(1,2,3)) 将生成
id IN (1,2,3)。

dropForeignKey()

function dropForeignKey($name, $table)

dropForeignKey() 方法成立和施行一条删除一个外键约束的SQL语句。 $name 参数指定的要去除的外键约束的名称。 $table 参数指定外键所属的表的称号。查询生成器将科学地引用的表名以及约束名称。

上边是一个示范,展现了什么样删除外键约束:

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

④.not in: 类似 in 操作,除了用 NOT IN 代替 IN  去生成SQL。

createIndex()

function createIndex($name, $table, $column, $unique=false)

createIndex() 方法营造和履行一条成立索引的SQL语句。 $name 参数指定要创立的目录的名称。$table 参数指定索引所属的表的名号。$column 参数指定要索引的列的称谓。 $unique 参数指定是还是不是成立一个唯一索引。如若索引由两个列,则必须用逗号将它们隔开。查询生成器会正确地引用表名,索引名和列名。

上边是一个示范,突显了什么创设索引:

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

⑤.like: operand 1 应是一个列或 DB 表达式,而 operand 2
是代表值的界定的数组,列或 DB
表明式应在那些数组的限制内。例如,array(‘like’, ‘name’, ‘%tester%’)
会生成 name LIKE ‘%tester%’。当确定值的限定为一个数组时,八个 LIKE
生成SQL时会用 AND 连接。例如,array(‘like’, ‘name’, array(‘%test%’,
‘%sample%’)) 会生成 name LIKE ‘%test%’ AND name LIKE ‘%sample%’。

dropIndex()

function dropIndex($name, $table)

dropIndex() 方法制造和实践一条删除索引的SQL语句。 $name 参数指定要删减的目录的称号。$table 参数指定索引所属的表的名称。查询生成器将科学地引用的表名以及索引名称。

上面是一个演示,显示了何等删除索引:

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

 

算是翻译完了~
如有错误或看不懂的地点,欢迎留言

 

 

⑥.not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE  去生成SQL。

⑦.or like: 类似 like 的操作,除了三个 like 生成 SQL 时用OR连接。

⑧.or not like:  类似 not like 的操作,除了七个 like 生成 SQL
时用OR连接。

上边是局地事例,使用的地点:

// 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=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))

请留意,当操小编含有like时,大家不可以不明确指定的通配符(如%和_)的方式。如若参数是从用户的输入,我们也应当选取上面的代码转义特殊字符,以预防他们被当作通配符:

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

andWhere()

function andWhere($conditions, $params=array())

用and 的格局丰裕到WHERE的规则中。此方法的一言一行大致是 where()
相同,除了它只是丰盛条件不可能代表它。在 where()
文档中有该措施参数的详细新闻。

orWhere()

function orWhere($conditions, $params=array())

用 or 的章程丰裕到WHERE的口径中。此方式的一言一行大约是 where()
相同,除了它只是增加条件不可能代替它。在 where()
文档中有该办法参数的详细新闻。

order()

function order($columns)

order() 方法指定询问的ORDER BY部分。$columns
参数指定列举办排序,那可以是一个富含用逗号分隔列和order的大方向(ASC 或
DESC)的字符串,或者一个列和order的主旋律的数组。列名称可以涵盖表前缀。该格局将电动引用列名,除非一列包涵部分括号(即给出一个
DB 表明式)。

上边是一些例证:

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

limit() and offset()

function limit($limit, $offset=null)
function offset($offset)

limit()和offset()方法指定询问的 LIMIT 和 OFFSET
部分。请留意,某些DBMS不援救 LIMIT 和 OFFSET
语法。在那种意况下,查询生成器将改写整个SQL语句来效仿 LIMIT 和 OFFSET
的职能。

下边是有的事例:

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

join() and its variants

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

join()方法及其变种指定如何与其余表连接,使用其中联接,左外连接,右外部联接,交叉连接,或自然连接。
$table 参数指定要加盟哪个表。表名可以涵盖数据库的前缀和 /
或别名。该形式将引用表名,除非它含有一个插入语,即一个DB表明式或子查询。
$conditions 参数指定连接条件。它的语法与where() 相同。$params
参数指定绑定到全体查询的参数。

值得注意的是,它不像其它的查询生成器方法,每一次调用一个join方法都会追加到SQL中。

下边是部分例子:

// 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))

group()

function group($columns)

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
子句。该方式将转义表名,并且将与要翻新的值的参数结合使用。

上边是一个例子:

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

delete()

function delete($table, $conditions='', $params=array())

delete()方法的确立和施行一个SQL删除语句。 $table
参数指定要刨除数据的表;$conditions 和$params像where()一样,指定 DELETE
语句中的 WHERE 子句。该方法将正确转义表名。

上边是一个例子:

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

4. 赤手空拳架构操作查询(Building Schema Manipulation Queries)

除外健康的数据检索和操作查询,查询生成器提供了一套用于可以操纵数据库的营造和实施SQL查询的法门。它支持以下操作:

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

Info:
尽管在差其他数据库管理体系中SQL语句操作数据库的方式有很大的例外,但询问生成器试图提供一个合并的接口,用于营造那几个查询。那简化了数据库迁移从一个数据库管理体系到另一个任务。

抽象数据类型 Abstract Data Types

询问生成器中引入了一组可以在定义表的列中使用抽象数据类型。与物理数据类型分歧,物理数据类型有现实独特的DBMS而且在不一样的DBMS中有很大的不比,抽象数据类型都是单身的DBMS。当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的物理数据类型。

上面的抽象数据类型由询问生成器的协助。

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本子开头此类型可以行使。

createTable()

function createTable($table, $columns, $options=null)

createTable() 方法创设和实施一条创设表的SQL语句。$table
参数指定要创建的表的称谓。 $columns
参数指定在新表中的列。他们必须被指定为名称类型的键值对(e.g.
‘username’=>’string’)。 $options
参数指定应附加到变化的SQL上的别样附加的SQL片段。查询生成器将科学的引用的表名以及列名。

当指定一个列的概念时,可以行使如上所述的抽象数据类型。查询生成器会根据当前选拔的数据库管理连串的抽象数据类型转换成相应的大体数据类型。例如,string
类型将被更换为MySQL的 varchar(255)。

一个列定义还能包蕴非抽象数据类型或标准。他们将从未其他改动的被放置在转变的SQL中。例如,point
不是一个抽象数据类型,借使用在列定义,它会出现在扭转的SQL中,而且 string
NOT NULL将被撤换varchar(255) NOT NULL(即唯有空虚类型的字符串转换)。

上面是一个例证,呈现了什么样创设一个表:

// 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')

renameTable()

function renameTable($table, $newName)

renameTable() 方法创立和履行一条重命名表名的SQL语句。 $table
参数指定要重命名的表的名号。 $newName
参数指定表的新名称。查询生成器将科学引用的表名。

上边是一个示范,演示了怎么重命名表:

// RENAME TABLE `tbl_users` TO `tbl_user`
renameTable('tbl_users', 'tbl_user')

dropTable()

function dropTable($table)

dropTable() 方法创建和施行一条删除表的SQL语句。在$table
参数指定要刨除的表的称谓。查询生成器会正确地引用的表名。

上面是一个示范浮现什么删除一个表:

// DROP TABLE `tbl_user`
dropTable('tbl_user')

truncateTable()

function truncateTable($table)

truncateTable() 方法创制和实践一条清空表数据的SQL语句。 $table
参数指定清空的表名。查询生成器会正确地引用的表名。

上边是一个示范展现怎么清空表:

// TRUNCATE TABLE `tbl_user`
truncateTable('tbl_user')

addColumn()

function addColumn($table, $column, $type)

addColumn() 方法创设并执行一条添加一个表的新列的SQL语句。 $table
参数指定新列将被添加到的表的称呼。 $column 参数指定新列的称谓。 $type
指定新列的定义。列定义中能够包罗抽象数据类型,如
“createTable”小节中的描述。查询生成器将科学的引用的表名以及列名。

下边是一个演示,演示怎么样添加一个表的列:

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

dropColumn()

function dropColumn($table, $column)

dropColumn() 方法成立和举行一条删除表列的SQL语句。 $table
参数指定要被删去的列所属的表名。 $column
参数指定要被删除的列名。查询生成器将科学地引用的表名以及列名。

上面是一个示范展示什么删除一个表列:

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

renameColumn()

function renameColumn($table, $name, $newName)

renameColumn() 方法创立和施行一条重命名列的SQL语句。 $table
参数指定要重命名的列所属的表的称呼。 $name 参数指定的旧列名。 $newName
指定新的列名。查询生成器将正确地引用的表名以及列名。

下边是一个示范,显示了如何重命名表列:

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

alterColumn()

function alterColumn($table, $column, $type)

alterColumn() 方法创制和推行一条修改表列的SQL语句。 $table
参数指定要被更改的列所属的表的名称。 $column
参数指定被改变的列的名目。$type
指定列的新定义。列定义中能够涵盖抽象数据类型,如
“createTable”小节中的描述。查询生成器将科学的引用的表名以及列名。

下边是一个演示,显示了怎么样转移一个表列:

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

addForeignKey()

function addForeignKey($name, $table, $columns,$refTable, $refColumns, $delete=null, $update=null)

addForeignKey() 方法成立和执行一条添加一个外键约束SQL语句。 $name
参数指定外键的称号。 $table 和 $columns
参数指定外键的表名和列名。如若有多个列,他们应当用逗号字符分隔。
$refTable 和 $refColumns 参数指定表名和列名的外键引用。 $delete 和
$update 参数指定 SQL语句中的 ON DELETE 和ON
UPDATE选项。半数以上的DBMS都支持这一个选拔:RESTRICT, CASCADE, NO ACTION,
SET DEFAULT, SET NULL. 。查询生成器会正确地引用表名,索引名和列名。

下边是一个演示,演示怎么样添加一个外键约束:

// 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', 'id', 'CASCADE', 'CASCADE')

dropForeignKey()

function dropForeignKey($name, $table)

dropForeignKey() 方法创制和实施一条删除一个外键约束的SQL语句。 $name
参数指定的要刨除的外键约束的名目。 $table
参数指定外键所属的表的名号。查询生成器将正确地引用的表名以及约束名称。

上面是一个示范,显示了哪些删除外键约束:

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

createIndex()

function createIndex($name, $table, $column, $unique=false)

createIndex() 方法打造和施行一条创制索引的SQL语句。 $name
参数指定要成立的目录的名目。$table 参数指定索引所属的表的名号。$column
参数指定要索引的列的称号。 $unique
参数指定是或不是创建一个唯一索引。假使索引由八个列,则必须用逗号将它们隔开。查询生成器会正确地引用表名,索引名和列名。

下边是一个演示,突显了怎么样创设索引:

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

dropIndex()

function dropIndex($name, $table)

dropIndex() 方法创制和施行一条删除索引的SQL语句。 $name
参数指定要去除的目录的称号。$table
参数指定索引所属的表的称呼。查询生成器将科学地引用的表名以及索引名称。

上面是一个示范,展现了什么删除索引:

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

但愿本文所述对大家yii学习抱有协助。

你可能感兴趣的篇章:

Your Comments

近期评论

    功能


    网站地图xml地图