yii框架詳解 之 CActiveRecord

2022-03-14 05:07:22 字數 3298 閱讀 9348

【特別注意事項】

1、所有要用於訪問的屬性,都要先在類中宣告(原資料表中的字段是預設可訪問的,自定義的屬性值,一定要先在類中新增宣告,才可以正常訪問)

2、資料庫的表面引用,一般都是有固定的資料庫表字首的,在類中,使用 } 代表著 table_pre.tablename

3、model()方法是 static 方法,不用例項化即可直接使用,多用於查詢。

4、rules() 方法 是用來驗證字段合法性的,而且可以設定每個規則的應用環境標示,如'on'=>'search',這點要好好利用。

5、attributelabels() 方法是設定每個欄位的描述資訊。

6、search()方法,用來查詢

【如何獲取關聯資料表的其他字段值】

1)首先在關係宣告裡,指定要查詢的字段別名12

3456

78910

1112

1314

1516

1718

19/**

* @return array relational rules.

*/

publicfunctionrelations()

}(id_order, id_visa)',

'select'=>array(

'*',                                  #獲取所有字段

'visas_visas.price as price_visa',     #visas_visas是關係表的別名,獲取關係表裡的字段值

),

),

'user'=>array(self::belongs_to,'user','id_customer)'),

);

}

2)然後,將關係別名在ar實體裡增加儲存其值的屬性。

class visa extends cactiverecord

3)然後通過關聯實體來訪問該別名字段的值。

$ordermodel->visas[0]->price_visa;

belongs_to關係表,關聯的keyid如何自定義指定

yii的relations裡self::belongs_to預設是用當前指定的鍵跟關聯表的主鍵進行join,例如:

return array(

'reply' => array(self::belongs_to, 'bookpostreply', 'postid'),

);

預設生成的sql是 on id = postid,id是bookpostreply的主鍵。

但今天我遇到的需求卻是需要生成 on bookpostreply.postid = t.postid,不去關聯主鍵,

後來無意中看到有個on的屬性,剛好跟sql裡的on一樣,於是抱著試試的想法,在配置裡加了上去

return array(

'reply' => array(self::belongs_to, 'bookpostreply', 'postid', 'on' => 't.postid=reply.postid'),

);

看除錯資訊裡的sql語句,發現yii生成了一條 on id = postid and t.postid=reply.postid 這樣的語句,看到這就已經明白這個東西的作用了,於是將postid清空,改成如下:

return array(

'reply' => array(self::belongs_to, 'bookpostreply', '', 'on' => 't.postid=reply.postid'),

);

其實,yii的文件有說明:

如果你需要指定自定義的pk->fk關聯,你可以定義陣列(『fk』=> 『pk')。

【多條件下關聯查詢結果集】

案例:$this->news =news::model()->with(array(

),'categories'=>array('condition'=>'categories.id_category='.$this->categoryid,'together'=>true),

))->findall(array(

'limit'=>$this->limit,

'condition'=>'t.active=1',

'order'=>'t.position'

));使用with('關係名稱1','關係名稱2

')方法,將延後查詢關聯表,

若如上案例,在with方法中,返回關係陣列,將更靈活。

若想即時聯合查詢,需要新增'together'=>true屬性值,才會組合為一句sql進行查詢。

我們來看下cactiverecord.php檔案裡,yii是如何設計with()方法的。

/**我們再去看 cdbcriteria 類中的 mergewith 方法定義

:/**

)注意,這裡就是我要強調的地方,yii預設且只執行關聯表之間的and條件查詢,也就是說,在給定不同條件查詢時,yii只為我們求取不同條件的

交集結果返回。

但是在底層的cdbcriteria 類中,預留了引數

$operator給我們。有需求的同學需要重寫

cactiverecord來實現拓展了哦。

來自為知筆記(wiz)

YII 框架 php框架系列之新秀YII

這裡也強烈推薦yii框架,這個年輕的框架由美國華人開發,名叫薛強。yii framwork是2009最佳php框架。yii 是乙個基於元件 用於開發大型 web 應用的高效能 php 框架。它將 web 程式設計中的可重用性發揮到極致,能夠顯著加速開發程序。yii 讀作 易 代表簡單 easy 高效...

yii框架學習(一)yii框架介紹

yii幾乎擁有了當今web2.0應用發展的全部特性。下面是這些特性的乙個簡短的清單。yii是乙個基於元件 用於開發大型web應用的高效能php框架。在web開發中yii可以最大限度的實現 重用,極大的提高開發的速度。名字yii 讀音是yee or ji 應該就是 易 的讀音 代表的是容易 easy ...

yii框架學習(六)yii框架相應處理

yii框架使用response類來修改statuscode,如下 res statuscode 404 複製 使用header類下的add方法既可以,如下是新增禁止瀏覽器快取配置資訊。res headers add pragma no cache 複製 使用set方法來修改 res headers ...