在組織資料庫時,需要使用主鍵與外來鍵約束才能使用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的一種特殊...