yii的relations方法的使用

2021-07-23 05:09:15 字數 2295 閱讀 3711

在組織資料庫時,需要使用主鍵與外來鍵約束才能使用activereocrd的關係操作;

兩張表之間的關係無非三種:一對多;一對一;多對多; 在ar中,定義了四種關係:

關係定義

例子belongs_to

a和b的關係是一對多,那麼b屬於a

post屬於user

has_many

a和b之間的關係是一對多,那麼a有多個b

user有多個post

has_one

這是has_many的一種特殊情況,a至多有乙個b

user至多有乙個profile

many_many

這個對應多對多的情況,在ar裡會將多對多以belongs_to和has_many的組合來解釋

post和category

在ar中通過重寫cactiverecord類的relations()方法來申明關係;這個方法返回乙個關係配置的陣列;乙個陣列無素代表乙個單獨的關係,格式如下:

'varname'=>array('relationtype','classname','foreignkey', ...additional options)

var name關係名

relation type四種關係:self::belongs_to, self::has_one, self::has_many, self::many_many

class name代表當前ar類要關聯的那個ar類名

foreign key實現關係的外來鍵, 有可能有多個,即列名

延遲載入時有一定的關係,下列選項可用:

方法如下

[html]view plain

copy

return array(  

'reply' => array(self::belongs_to, 'bookpostreply', 'postid'),//連線bookpostreply表  

);  

self::belongs_to預設是用當前指定的鍵跟關聯表的主鍵進行join

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

需要生成 on bookpostreply.postid = t.postid,不去關聯主鍵,而且關聯其中乙個欄位的值

[html]view plain

copy

return array(  

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

);  

關聯中的東西也可以有

order

[html]view plain

copy

'imgs'=>array(self::has_many,"lightproimgs","pid","order"=>"imgs.paixu desc","limit"=>3)  

使用方法:

面介紹是一種「急切匯入」方法:在使用find和findall時,使用with()方法,例:

[html]view plain

copy

$posts=post::model()->with('author')->findall()    

$posts=post::model()->with('author')->findall()  

這樣就可以在一次查詢時連同查詢其他資訊了;with方法可以接受多個關係:

[php]view plain

copy

$posts=post::model()->with('author','categories')->findall();    

$posts=post::model()->with('author','categories')->findall();  

這樣就可以將作者和類別的資訊一併進行查詢;同樣,with還支援多重急切匯入

[php]view plain

copy

$posts=post::model()->with( 'author.profile', 'author.posts', 'categories')->findall(); 

Yii中的relations方法

以blog示例 重點看注釋 user類中的relations方法如下 public function relations post中的方法如下 public function relations comment中的ralations方法如下 public function attributelabe...

yii的relations方法的使用

在組織資料庫時,需要使用主鍵與外來鍵約束才能使用activereocrd的關係操作 兩張表之間的關係無非三種 一對多 一對一 多對多 在ar中,定義了四種關係 關係定義 例子belongs to a和b的關係是一對多,那麼b屬於a post屬於user has many a和b之間的關係是一對多,那...

Yii的relations方法的使用

兩張表之間的關係無非三種 一對多 一對一 多對多 在ar中,定義了四種關係 關係定義 例子belongs to a和b的關係是一對多,那麼b屬於a post屬於user has many a和b之間的關係是一對多,那麼a有多個b user有多個post has one 這是has many的一種特殊...