1. 程式人生 > >Yii1.1中的關聯查詢

Yii1.1中的關聯查詢

Yii1權威指南在講述關係型活動記錄時,給出了下圖的資料表關係。首先以Yii 框架的方式對錶之間的關係進行分析。

post表與user 表是 BELONGS_TO關係:post表中的每一條記錄只有一個author_id屬性,通過這個autho_id,在user表中可以找到唯一的使用者。在現實中的含義是,每一個帖子,都屬於唯一一個使用者;使用者(作者)發表一篇貼子以後,我們通過該帖子的author_id屬性,就可以找到這個帖子的作者。也就是說,post天生是屬於使用者的。在資料庫中,post 表有一個外來鍵author_id與user表的主鍵id對應。

    user表與profile表是HAS_ONE

關係:user表中的每一條記錄最多有一個profile記錄與之對應。在現實中的含義是,每個使用者的個人簡介最多隻有一條,有可能沒有。個人簡介中的頭像和個人主頁都只有一個副本。在資料庫中,profile表的owner_id既是主鍵也是指向user表的外來鍵。

    user表與post表是HAS_MANY關係:user表中的每一條記錄有多個post記錄與之對應。每個使用者可以有多個帖子。

HAS_ONEHAS_MANY的特例。

假設post,user,profile,category幾個ActiveRecord模型中的relation都已經依照權威指南正確定義。我們可以以如下方式處理資料庫查詢。

渴求式載入:

將username為'cyz'的帖子的資訊以陣列的形式返回,以post id作為陣列索引。

$condition = 'username  = :username';

$posts=Post::model()->with('author',category)

->findAll(array('condition' =>$condition, 

'params' => array('username' => 'cyz'),

'index' => 'id'

));

foreach($posts as $key => $post) {

/*獲取帖子的使用者名稱 $post->author->username;*/

/*獲取帖子的標題 $post->title;*/

}