2011-02-24 71 views
0

我有三個表:Yii的兩級 「與」 在關係活動記錄

  1. tbl_tag
  2. tbl_post
  3. tbl_post_tag(post_id, tag_id)
  4. tbl_users

每個帖子有多個標籤,每個標籤有多個帖子。 (MANY_MANY)

每個帖子只有一個用戶,每個用戶有多個帖子。

我用tbl_post_tag來記錄Post和Tag之間的關係。

現在,我想通過TAG_ID檢索所有帖子(如顯示所有職位和相應的用戶與TAG_ID = 1)

我真的不知道如何做到這一點。

我的猜測是使用Tag::model()->with("post")->findByPk(1),但是這是否會同時檢索用戶?

或者有沒有更好的方式來完成這項工作?

謝謝!

回答

6

只是爲了澄清,你想用一個標籤獲得所有的帖子(和發佈它的用戶)?

設置以下的標籤模型關係(應該還有已如果您生成的代碼與GII或的yiic):

public function relations() 
{ 
    return array(
    'posts'=>array(self::MANY_MANY, 'Post', 'tbl_post_tag(post_id, tag_id)'), 
); 
} 

這將讓你得到所有的帖子與標籤像這樣:

$myTag = Tag::model()->findByPk(1); 
$posts = $myTag->posts; 

雖然這並沒有得到用戶。如果你希望每個帖子的用戶,這樣做(假設你已經在Post模型用戶和崗位之間建立正確的關係):

foreach ($myTag->posts as $post) { 
    $theUser = $post->user; 
    $theUsersName = $post->user->name; 
} 

你提到的with()命令是關於效率,因爲它只是預加載關係請求,而不是在您調用它時等待每個請求。你可以閱讀更多關於它hereClass Reference

雖然這可能不是你要找的。你的問題並不十分清楚。

如果您嘗試執行大JOIN查詢,則需要繼續並寫入JOIN查詢。這取決於你在做什麼。將JOIN和SELECT條件添加到findall()語句中並不算太壞。

祝你好運!

+0

對不起,我忘了回覆你的答案,但你所說的正是我所需要的!謝謝!! – 2011-03-02 12:59:29