国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

Yii查詢(xún)生成器(Query Builder)用法實(shí)例教程

2024-05-04 23:25:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Yii查詢(xún)生成器(Query Builder)用法,包括了各種常見(jiàn)的查詢(xún)操作,需要的朋友可以參考下
 
 

本文為yii官網(wǎng)英文文檔的翻譯版本,主要介紹了Yii查詢(xún)生成器(Query Builder)的用法。分享給大家供大家參考之用。具體如下:

首先,Yii的查詢(xún)生成器提供了用面向?qū)ο蟮姆绞綄?xiě)SQL語(yǔ)句。它允許開(kāi)發(fā)人員使用類(lèi)的方法和屬性來(lái)指定一個(gè)SQL語(yǔ)句的各個(gè)部分。然后,組裝成一個(gè)有效的SQL語(yǔ)句,可以通過(guò)調(diào)用DAO數(shù)據(jù)訪問(wèn)對(duì)象的描述方法為進(jìn)一步執(zhí)行。以下顯示了一個(gè)典型的使用查詢(xún)生成器建立一個(gè)select語(yǔ)句:

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

當(dāng)你在應(yīng)用程序中需要組裝SQL語(yǔ)句的程序,或基于一些條件邏輯時(shí),最好使用查詢(xún)生成器。使用查詢(xún)生成器的好處主要包括:

①.它可以建立復(fù)雜的SQL語(yǔ)句編程。

②.它會(huì)自引用表名和列名防止SQL保留字和特殊字符的沖突。

③.它還可以引用參數(shù)值和使用參數(shù)綁定,這有助于減少SQL注入攻擊的風(fēng)險(xiǎn)。

④.它提供了一定程度的數(shù)據(jù)庫(kù)抽象,簡(jiǎn)化了遷移到不同的數(shù)據(jù)庫(kù)平臺(tái)的成本。

它不強(qiáng)制使用查詢(xún)生成器。事實(shí)上,如果你的查詢(xún)是簡(jiǎn)單的,它是更容易和更快的直接寫(xiě)SQL語(yǔ)句。

注:查詢(xún)生成器不能用于修改現(xiàn)有的查詢(xún)指定為SQL語(yǔ)句。例如,下面的代碼將不能工作:

$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));

換句話(huà)說(shuō),不要混合使用普通的SQL和查詢(xún)生成器。

1. 制備查詢(xún)生成器(Preparing Query Builder)

Yii的查詢(xún)生成器是從 CDbCommand 提供主要數(shù)據(jù)庫(kù)查詢(xún)類(lèi),描述數(shù)據(jù)訪問(wèn)對(duì)象。

開(kāi)始使用查詢(xún)生成器,我們創(chuàng)造了 CDbCommand 的一個(gè)新實(shí)例,

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

我們使用 Yii::app()->db 來(lái)獲得數(shù)據(jù)庫(kù)連接,然后調(diào)用 CDbConnection::createCommand() 創(chuàng)建所需的命令實(shí)例。

請(qǐng)注意,將整個(gè)SQL語(yǔ)句放入 createcommand() ,叫做數(shù)據(jù)訪問(wèn)對(duì)象,我們需呀把設(shè)置它為空。這是因?yàn)槲覀儗⒃谙旅娴慕忉屩惺褂貌樵?xún)生成器添加SQL語(yǔ)句的各個(gè)部分的方法。

2. 建立數(shù)據(jù)檢索查詢(xún)(Building Data Retrieval Queries)

數(shù)據(jù)檢索查詢(xún)是指選擇SQL語(yǔ)句。查詢(xún)生成器提供了一套方法來(lái)建立一個(gè)SELECT語(yǔ)句的各個(gè)部分。因?yàn)樗羞@些方法返回 CDbCommand 的實(shí)例,我們可以使用方法鏈調(diào)用他們,如圖所示,在本節(jié)開(kāi)頭的例子。

select():             指定查詢(xún)的選擇部分                       specifies the SELECT part of the query
selectDistinct():  指定查詢(xún)不重復(fù)的選擇部分               specifies the SELECT part of the query and turns on the DISTINCT flag
from():              指定查詢(xún)的FROM                           specifies the FROM part of the query
where():            指定查詢(xún)的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():               添加一個(gè)內(nèi)部聯(lián)接的查詢(xún)片段            appends an inner join query fragment
leftJoin():          追加一個(gè)左外連接查詢(xún)片段               appends a left outer join query fragment
rightJoin():        追加一個(gè)右外部聯(lián)接查詢(xún)片段            appends a right outer join query fragment
crossJoin():       追加一個(gè)交叉連接查詢(xún)片段               appends a cross join query fragment
naturalJoin():     追加一個(gè)自然連接查詢(xún)片段               appends a natural join query fragment
group():            指定查詢(xún)的GROUP BY                   specifies the GROUP BY part of the query
having():           指定查詢(xún)的HAVING                       specifies the HAVING part of the query
order():            指定查詢(xún)的ORDER BY                    specifies the ORDER BY part of the query
limit():              指定查詢(xún)的LIMIT                           specifies the LIMIT part of the query
offset():           指定查詢(xún)的OFFSET                        specifies the OFFSET part of the query
union():           添加查詢(xún)的UNION                          appends a UNION query fragment

在下面,我們將解釋如何使用這些查詢(xún)生成器方法。為簡(jiǎn)單起見(jiàn),我們假設(shè)底層數(shù)據(jù)庫(kù)是MySQL。注意:如果你使用的是其他數(shù)據(jù)庫(kù),表/列/值引用的例子可能是不同的。

select()

function select($columns='*')

該select()方法指定一個(gè)查詢(xún)的選擇部分。$columns參數(shù)指定要選擇的列,它可以是一個(gè)字符串,用逗號(hào)分隔列,或者一個(gè)數(shù)組的列名稱(chēng)。列的名稱(chēng)可以包含表的前綴和 / 或列別名。該方法將自動(dòng)引用列名,除非一列包含一些括號(hào)(這意味著這個(gè)列是一個(gè)DB的表達(dá)式)。

下面是一些例子:

// 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 numselect(array('id', 'count(*) as num'))

selectDistinct()

function selectDistinct($columns)

selectdistinct()方法類(lèi)似于select(),除了它打開(kāi)了 DISTINCT 的標(biāo)志。例如,selectdistinct('id,用戶(hù)名”)會(huì)產(chǎn)生以下SQL:

SELECT DISTINCT `id`, `username`

from()

function from($tables)

from()方法指定來(lái)了一個(gè)查詢(xún)的FROM部分。 $tables 參數(shù)指定表的選擇。這可以是一個(gè)字符串,用逗號(hào)分隔的表的名稱(chēng),或表名數(shù)組。表的名稱(chēng)可以包含架構(gòu)前綴(例如公共。tbl_user)和/或表的別名(e.g.tbl_user U)。該方法將自動(dòng)引用表的名稱(chēng),除非它包含一些括號(hào)(即表是一個(gè)給定的子查詢(xún)或DB的表達(dá)式)。

下面是一些例子:

// 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) pfrom(array('tbl_user', '(select * from tbl_profile) p'))

where()

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

where()方法指定查詢(xún)的WHERE。$conditions 參數(shù)指定查詢(xún)條件的同時(shí),$params 指定參數(shù)綁定到整個(gè)查詢(xún)。$conditions參數(shù)可以是一個(gè)字符串(例如id = 1)或一個(gè)數(shù)組中的格式:

array(operator, operand1, operand2, ...)
operator 可以是以下的任何一個(gè):

①.and: operands 應(yīng)該使用 and 連接在一起。例如, array('and', 'id=1', 'id=2') 將產(chǎn)生 id=1 AND id=2 。如果一個(gè)操作數(shù)是一個(gè)數(shù)組,它將使用這里描述的相同規(guī)則轉(zhuǎn)換成一個(gè)字符串。例如,array('and', 'type=1', array('or', 'id=1', 'id=2')) 將生成 type=1 AND (id=1 OR id=2)。

②.or: 類(lèi)似 and 操作,除了operands 是使用 OR 連接的。

③.in: operand 1 應(yīng)是一個(gè)列或 DB 表達(dá)式,而 operand 2 是代表值的范圍的數(shù)組,列或 DB 表達(dá)式應(yīng)在這個(gè)數(shù)組的范圍內(nèi)。例如,array('in', 'id', array(1,2,3)) 將生成 id IN (1,2,3)。

④.not in: 類(lèi)似 in 操作,除了用 NOT IN 代替 IN  去生成SQL。

⑤.like: operand 1 應(yīng)是一個(gè)列或 DB 表達(dá)式,而 operand 2 是代表值的范圍的數(shù)組,列或 DB 表達(dá)式應(yīng)在這個(gè)數(shù)組的范圍內(nèi)。例如,array('like', 'name', '%tester%') 會(huì)生成 name LIKE '%tester%'。當(dāng)規(guī)定值的范圍為一個(gè)數(shù)組時(shí),多個(gè) LIKE 生成SQL時(shí)會(huì)用 AND 連接。例如,array('like', 'name', array('%test%', '%sample%')) 會(huì)生成 name LIKE '%test%' AND name LIKE '%sample%'。

⑥.not like: 類(lèi)似 like 的操作,除了用 NOT LIKE 代替 LIKE  去生成SQL。

⑦.or like: 類(lèi)似 like 的操作,除了多個(gè) like 生成 SQL 時(shí)用OR連接。

⑧.or not like:  類(lèi)似 not like 的操作,除了多個(gè) like 生成 SQL 時(shí)用OR連接。

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

// WHERE id=1 or id=2where('id=1 or id=2')// WHERE id=:id1 or id=:id2where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))// WHERE id=1 OR id=2where(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%')))

請(qǐng)注意,當(dāng)操作者含有l(wèi)ike時(shí),我們必須明確指定的通配符(如%和_)的模式。如果參數(shù)是從用戶(hù)的輸入,我們也應(yīng)該使用下面的代碼轉(zhuǎn)義特殊字符,以防止他們被當(dāng)作通配符:

$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() 文檔中有該方法參數(shù)的詳細(xì)信息。

orWhere()

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

用 or 的方式添加到WHERE的條件中。此方法的行為幾乎是 where() 相同,除了它只是添加條件不能取代它。在 where() 文檔中有該方法參數(shù)的詳細(xì)信息。

order()

function order($columns)

order() 方法指定查詢(xún)的ORDER BY部分。$columns 參數(shù)指定列進(jìn)行排序,這可以是一個(gè)包含用逗號(hào)分隔列和order的方向(ASC 或 DESC)的字符串,或者一個(gè)列和order的方向的數(shù)組。列名稱(chēng)可以包含表前綴。該方法將自動(dòng)引用列名,除非一列包含一些括號(hào)(即給出一個(gè) DB 表達(dá)式)。

下面是一些例子:

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

limit() and offset()

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

limit()和offset()方法指定查詢(xún)的 LIMIT 和 OFFSET 部分。請(qǐng)注意,某些DBMS不支持 LIMIT 和 OFFSET 語(yǔ)法。在這種情況下,查詢(xún)生成器將改寫(xiě)整個(gè)SQL語(yǔ)句來(lái)模擬 LIMIT 和 OFFSET 的功能。

下面是一些例子:

// LIMIT 10  取前10條limit(10)// LIMIT 10 OFFSET 20  取到第21~30條limit(10, 20)// OFFSET 20  去掉前20條后剩下的數(shù)據(jù)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()方法及其變種指定如何與其他表連接,使用內(nèi)部聯(lián)接,左外連接,右外部聯(lián)接,交叉連接,或自然連接。 $table 參數(shù)指定要加入哪個(gè)表。表名可以包含數(shù)據(jù)庫(kù)的前綴和 / 或別名。該方法將引用表名,除非它包含一個(gè)插入語(yǔ),即一個(gè)DB表達(dá)式或子查詢(xún)。 $conditions 參數(shù)指定連接條件。它的語(yǔ)法與where() 相同。$params 參數(shù)指定綁定到整個(gè)查詢(xún)的參數(shù)。

值得注意的是,它不像其他的查詢(xún)生成器方法,每次調(diào)用一個(gè)join方法都會(huì)追加到SQL中。

下面是一些例子:

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

group()

function group($columns)

group() 方法指定查詢(xún)的GROUP BY。 $columns 參數(shù)指定列進(jìn)行分組,它可以是一個(gè)用逗號(hào)分隔的列的字符串,或者一個(gè)列的數(shù)組。列名稱(chēng)可以包含表前綴。該方法將自動(dòng)引用列名,除非一列包含一些括號(hào)(即是一個(gè) DB 表達(dá)式)。

下面是一些例子:

// 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() 方法指定查詢(xún)的 HAVING。它的使用方式與 where() 相同。

下面是一些例子:

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

union()

function union($sql)

union() 方法指定查詢(xún) UNION。它使用UNION操作附加到現(xiàn)有的SQL上。調(diào)用union()多次將現(xiàn)有的SQL附加多個(gè)表。

下面是一些例子:

// UNION (select * from tbl_profile)union('select * from tbl_profile')

執(zhí)行查詢(xún)(Executing Queries)

調(diào)用上面查詢(xún)生成器的方法來(lái)建立一個(gè)查詢(xún)后,我們可以調(diào)用DAO方法數(shù)據(jù)訪問(wèn)對(duì)象執(zhí)行查詢(xún)。例如,我們可以調(diào)用 CDbCommand::queryRow() 獲得連續(xù)的結(jié)果,或者使用 CDbCommand::queryAll() 立刻得到所有行。

例子:

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

檢索表(Retrieving SQLs)

除了執(zhí)行查詢(xún)生成器的查詢(xún),我們也可以獲取相應(yīng)的SQL語(yǔ)句。這可以通過(guò)調(diào)用 CDbCommand::getText() 獲得。

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

如果有任何參數(shù)必須綁定到查詢(xún)的,他們可以通過(guò) CDbCommand::params 的屬性綁定。

建立查詢(xún)的替代語(yǔ)法(Alternative Syntax for Building Queries)

有時(shí),使用方法鏈來(lái)建立一個(gè)查詢(xún)可能不是最佳的選擇。Yii的查詢(xún)生成器允許使用對(duì)簡(jiǎn)單象屬性賦值的方式去建立查詢(xún)。特別是,每個(gè)查詢(xún)生成器的方法都有一個(gè)具有相同名稱(chēng)的屬性。給屬性賦值相當(dāng)于調(diào)用相應(yīng)的方法。例如,下面兩個(gè)語(yǔ)句是等價(jià)的,假設(shè)$command 代表 CDbCommand 對(duì)象:

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

此外, CDbConnection::createCommand() 方法可以把一個(gè)數(shù)組作為參數(shù)。數(shù)組中的鍵值對(duì)將被用來(lái)初始化創(chuàng)建的 CDbCommand 實(shí)例的屬性。這意味著,我們可以使用下面的代碼來(lái)建立一個(gè)查詢(xún):

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

建立多個(gè)查詢(xún)(Building Multiple Queries)

一個(gè) CDbCommand 實(shí)例可以重復(fù)使用多次建立幾個(gè)查詢(xún)。建立一個(gè)新的查詢(xún)之前,需要調(diào)用 CDbCommand::reset() 方法以清理前面的查詢(xún)。例子:

$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. 建立數(shù)據(jù)操作查詢(xún)(Building Data Manipulation Queries)

數(shù)據(jù)操作查詢(xún)是指SQL語(yǔ)句插入,更新和刪除數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。對(duì)應(yīng)于這些查詢(xún),查詢(xún)生成器分別提供了插入,更新和刪除的方法。不同于上面介紹 SELECT 的查詢(xún)方法,這些數(shù)據(jù)操作查詢(xún)方法將建立一個(gè)完整的SQL語(yǔ)句,并立即執(zhí)行。

insert(): 將行插入到表
update(): 更新表中的數(shù)據(jù)
delete(): 從表中刪除數(shù)據(jù)
下面描述了這些數(shù)據(jù)操作查詢(xún)方法。

insert()

function insert($table, $columns)

insert()方法的建立和執(zhí)行一條 INSERT SQL 語(yǔ)句。 $table 參數(shù)指定要插入的表,而鍵值對(duì)數(shù)組 $columns 指定要插入的列的值。該方法將轉(zhuǎn)義表名,并且將與綁定參數(shù)結(jié)合使用。

下面是一個(gè)例子:

// 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()方法的建立和執(zhí)行一個(gè)SQL更新語(yǔ)句。 $table 參數(shù)指定要更新的表; $columns 是鍵值對(duì)的數(shù)組,用于指定要更新的列值的;$conditions 和 $params 像where()一樣,指定 UPDATE 語(yǔ)句中的 WHERE 子句。該方法將轉(zhuǎn)義表名,并且將與要更新的值的參數(shù)結(jié)合使用。

下面是一個(gè)例子:

// 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()方法的建立和執(zhí)行一個(gè)SQL刪除語(yǔ)句。 $table 參數(shù)指定要?jiǎng)h除數(shù)據(jù)的表;$conditions 和$params像where()一樣,指定 DELETE 語(yǔ)句中的 WHERE 子句。該方法將正確轉(zhuǎn)義表名。

下面是一個(gè)例子:

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

4. 建立架構(gòu)操作查詢(xún)(Building Schema Manipulation Queries)

除了正常的數(shù)據(jù)檢索和操作查詢(xún),查詢(xún)生成器提供了一套用于可以操縱數(shù)據(jù)庫(kù)的構(gòu)建和執(zhí)行SQL查詢(xún)的方法。它支持以下操作:

createTable(): 創(chuàng)建一個(gè)表
renameTable(): 重命名表
dropTable(): 刪除一個(gè)表
truncateTable(): 截?cái)嘁粋€(gè)表,即刪除表中的所有數(shù)據(jù)但不刪除表本身
addColumn(): 給表添加列
renameColumn(): 重命名表中的列
alterColumn(): 改變一個(gè)表的列
addForeignKey(): 添加一個(gè)外鍵(自1.1.6可用)
dropForeignKey(): 刪除一個(gè)外鍵(自1.1.6可用)
dropColumn(): 刪除一個(gè)表的列
createIndex(): 創(chuàng)建一個(gè)索引
dropIndex(): 刪除一個(gè)索引

Info: 雖然在不同的數(shù)據(jù)庫(kù)管理系統(tǒng)中SQL語(yǔ)句操作數(shù)據(jù)庫(kù)的模式有很大的不同,但查詢(xún)生成器試圖提供一個(gè)統(tǒng)一的接口,用于構(gòu)建這些查詢(xún)。這簡(jiǎn)化了數(shù)據(jù)庫(kù)遷移從一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)到另一個(gè)任務(wù)。

抽象數(shù)據(jù)類(lèi)型 Abstract Data Types

查詢(xún)生成器中引入了一組可以在定義表的列中使用抽象數(shù)據(jù)類(lèi)型。與物理數(shù)據(jù)類(lèi)型不同,物理數(shù)據(jù)類(lèi)型有具體獨(dú)特的DBMS而且在不同的DBMS中有很大的不同,抽象數(shù)據(jù)類(lèi)型都是獨(dú)立的DBMS。當(dāng)抽象數(shù)據(jù)類(lèi)型在定義表的列中使用時(shí),查詢(xún)生成器將其轉(zhuǎn)換成相應(yīng)的物理數(shù)據(jù)類(lèi)型。

下面的抽象數(shù)據(jù)類(lèi)型由查詢(xún)生成器的支持。

pk: 一個(gè)通用的主鍵類(lèi)型,將被轉(zhuǎn)換成 int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY for MySQL;
string: 字符串類(lèi)型,將被轉(zhuǎn)換成 varchar(255) for MySQL;
text: 文本型(長(zhǎng)字符串),將被轉(zhuǎn)換成 text for MySQL;
integer: 整數(shù)類(lèi)型,將被轉(zhuǎn)換成 int(11) for MySQL;
float: 浮點(diǎn)數(shù)類(lèi)型,將被轉(zhuǎn)換成 float for MySQL;
decimal: 十進(jìn)制數(shù)類(lèi)型,將被轉(zhuǎn)換成 decimal for MySQL;
datetime: datetime類(lèi)型,將被轉(zhuǎn)換成 datetime for MySQL;
timestamp: 時(shí)間戳類(lèi)型,將被轉(zhuǎn)換成 timestamp for MySQL;
time: 時(shí)間類(lèi)型,將被轉(zhuǎn)換成 time for MySQL;
date: 日期類(lèi)型,將被轉(zhuǎn)換成 date for MySQL;
binary: 二進(jìn)制數(shù)據(jù)類(lèi)型,將被轉(zhuǎn)換成 blob for MySQL;
boolean: 布爾類(lèi)型,將被轉(zhuǎn)換成 tinyint(1) for MySQL;
money: 金錢(qián)/貨幣型,將被轉(zhuǎn)換成 decimal(19,4) for MySQL. 自1.1.8版本開(kāi)始此類(lèi)型可以使用。

createTable()

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

createTable() 方法構(gòu)建和執(zhí)行一條創(chuàng)建表的SQL語(yǔ)句。$table 參數(shù)指定要?jiǎng)?chuàng)建的表的名稱(chēng)。 $columns 參數(shù)指定在新表中的列。他們必須被指定為名稱(chēng)類(lèi)型的鍵值對(duì)(e.g. 'username'=>'string')。 $options 參數(shù)指定應(yīng)附加到生成的SQL上的任何額外的SQL片段。查詢(xún)生成器將正確的引用的表名以及列名。

當(dāng)指定一個(gè)列的定義時(shí),可以使用如上所述的抽象數(shù)據(jù)類(lèi)型。查詢(xún)生成器會(huì)根據(jù)當(dāng)前使用的數(shù)據(jù)庫(kù)管理系統(tǒng)的抽象數(shù)據(jù)類(lèi)型轉(zhuǎn)換成相應(yīng)的物理數(shù)據(jù)類(lèi)型。例如,string 類(lèi)型將被轉(zhuǎn)換為MySQL的 varchar(255)。

一個(gè)列定義還可以包含非抽象數(shù)據(jù)類(lèi)型或規(guī)格。他們將沒(méi)有任何改變的被放置在生成的SQL中。例如,point 不是一個(gè)抽象數(shù)據(jù)類(lèi)型,如果用在列定義,它會(huì)出現(xiàn)在生成的SQL中,而且 string NOT NULL將被轉(zhuǎn)換varchar(255) NOT NULL(即只有抽象類(lèi)型的字符串轉(zhuǎn)換)。

下面是一個(gè)例子,顯示了如何創(chuàng)建一個(gè)表:

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

renameTable()

function renameTable($table, $newName)

renameTable() 方法創(chuàng)建和執(zhí)行一條重命名表名的SQL語(yǔ)句。 $table 參數(shù)指定要重命名的表的名稱(chēng)。 $newName 參數(shù)指定表的新名稱(chēng)。查詢(xún)生成器將正確引用的表名。

下面是一個(gè)示例,演示了如何重命名表:

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

dropTable()

function dropTable($table)

dropTable() 方法創(chuàng)建和執(zhí)行一條刪除表的SQL語(yǔ)句。在$table 參數(shù)指定要?jiǎng)h除的表的名稱(chēng)。查詢(xún)生成器會(huì)正確地引用的表名。

下面是一個(gè)示例展示如何刪除一個(gè)表:

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

truncateTable()

function truncateTable($table)

truncateTable() 方法建立和執(zhí)行一條清空表數(shù)據(jù)的SQL語(yǔ)句。 $table 參數(shù)指定清空的表名。查詢(xún)生成器會(huì)正確地引用的表名。

下面是一個(gè)示例顯示如何清空表:

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

addColumn()

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

addColumn() 方法創(chuàng)建并執(zhí)行一條添加一個(gè)表的新列的SQL語(yǔ)句。 $table 參數(shù)指定新列將被添加到的表的名稱(chēng)。 $column 參數(shù)指定新列的名稱(chēng)。 $type 指定新列的定義。列定義中可以包含抽象數(shù)據(jù)類(lèi)型,如 "createTable"小節(jié)中的描述。查詢(xún)生成器將正確的引用的表名以及列名。

下面是一個(gè)示例,演示如何添加一個(gè)表的列:

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

dropColumn()

function dropColumn($table, $column)

dropColumn() 方法創(chuàng)建和執(zhí)行一條刪除表列的SQL語(yǔ)句。 $table 參數(shù)指定要被刪除的列所屬的表名。 $column 參數(shù)指定要被刪除的列名。查詢(xún)生成器將正確地引用的表名以及列名。

下面是一個(gè)示例展示如何刪除一個(gè)表列:

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

renameColumn()

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

renameColumn() 方法創(chuàng)建和執(zhí)行一條重命名列的SQL語(yǔ)句。 $table 參數(shù)指定要重命名的列所屬的表的名稱(chēng)。 $name 參數(shù)指定的舊列名。 $newName 指定新的列名。查詢(xún)生成器將正確地引用的表名以及列名。

下面是一個(gè)示例,展示了如何重命名表列:

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

alterColumn()

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

alterColumn() 方法創(chuàng)建和執(zhí)行一條修改表列的SQL語(yǔ)句。 $table 參數(shù)指定要被改變的列所屬的表的名稱(chēng)。 $column 參數(shù)指定被改變的列的名稱(chēng)。$type 指定列的新定義。列定義中可以包含抽象數(shù)據(jù)類(lèi)型,如 "createTable"小節(jié)中的描述。查詢(xún)生成器將正確的引用的表名以及列名。

下面是一個(gè)示例,展示了如何更改一個(gè)表列:

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

addForeignKey()

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

addForeignKey() 方法創(chuàng)建和執(zhí)行一條添加一個(gè)外鍵約束SQL語(yǔ)句。 $name 參數(shù)指定外鍵的名稱(chēng)。 $table 和 $columns 參數(shù)指定外鍵的表名和列名。如果有多個(gè)列,他們應(yīng)該用逗號(hào)字符分隔。 $refTable 和 $refColumns 參數(shù)指定表名和列名的外鍵引用。 $delete 和 $update 參數(shù)指定 SQL語(yǔ)句中的 ON DELETE 和ON UPDATE選項(xiàng)。大多數(shù)的DBMS都支持這些選項(xiàng):RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL. 。查詢(xún)生成器會(huì)正確地引用表名,索引名和列名。

下面是一個(gè)示例,演示如何添加一個(gè)外鍵約束:

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

dropForeignKey()

function dropForeignKey($name, $table)

dropForeignKey() 方法創(chuàng)建和執(zhí)行一條刪除一個(gè)外鍵約束的SQL語(yǔ)句。 $name 參數(shù)指定的要?jiǎng)h除的外鍵約束的名稱(chēng)。 $table 參數(shù)指定外鍵所屬的表的名稱(chēng)。查詢(xún)生成器將正確地引用的表名以及約束名稱(chēng)。

下面是一個(gè)示例,顯示了如何刪除外鍵約束:

// 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() 方法構(gòu)建和執(zhí)行一條創(chuàng)建索引的SQL語(yǔ)句。 $name 參數(shù)指定要?jiǎng)?chuàng)建的索引的名稱(chēng)。$table 參數(shù)指定索引所屬的表的名稱(chēng)。$column 參數(shù)指定要索引的列的名稱(chēng)。 $unique 參數(shù)指定是否創(chuàng)建一個(gè)唯一索引。如果索引由多個(gè)列,則必須用逗號(hào)將它們隔開(kāi)。查詢(xún)生成器會(huì)正確地引用表名,索引名和列名。

下面是一個(gè)示例,顯示了如何創(chuàng)建索引:

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

dropIndex()

function dropIndex($name, $table)

dropIndex() 方法創(chuàng)建和執(zhí)行一條刪除索引的SQL語(yǔ)句。 $name 參數(shù)指定要?jiǎng)h除的索引的名稱(chēng)。$table 參數(shù)指定索引所屬的表的名稱(chēng)。查詢(xún)生成器將正確地引用的表名以及索引名稱(chēng)。

下面是一個(gè)示例,顯示了如何刪除索引:

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

希望本文所述對(duì)大家yii學(xué)習(xí)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄底市| 阳西县| 巫溪县| 瑞昌市| 财经| 施秉县| 芜湖市| 隆化县| 临泽县| 五常市| 通山县| 全南县| 林甸县| 明光市| 佛教| 科技| 申扎县| 左云县| 天水市| 嘉祥县| 泽州县| 泗洪县| 扬州市| 昌宁县| 旬邑县| 光山县| 杂多县| 台东县| 灵丘县| 太原市| 安平县| 车致| 民和| 曲水县| 合肥市| 绥滨县| 梧州市| 沙雅县| 岑巩县| 清涧县| 仁寿县|