2010-08-26 85 views
2

所以這裏的情景:關係功能的AR模型,多對一的關係

我有兩張表,第&項目。

一個項目可以有許多問題和一個問題可以只是一個項目。

由於問題是多對一的,您是否必須定義它?

因爲我知道,在項目模型,我有:

public function relations() 
{ 
    return array(
    'issues' => array(self::HAS_MANY, 'Issue', 'project_id'), 
    'users' => array(self::MANY_MANY, 'User', 'tbl_project_user_assignment(project_id, user_id)'), 
    ); 
} 

刊髮型號我什麼都沒有,但外鍵:

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(
     'requester' => array(self::BELONGS_TO, 'User', 'requester_id'), 
     'owner' => array(self::BELONGS_TO, 'User', 'owner_id'), 
     'project' => array(self::BELONGS_TO, 'Project', 'project_id'), 
    ); 
} 

我猜測任何一個關係並不需要是界定?

預先感謝您。

順便說一句,我在做敏捷Yii書,我最終問自己這個問題。 AR類有一個選項(http://www.yiiframework.com/doc/guide/database.arr)。

但是由於某種原因,這種情況是可選的嗎?

回答

5

它幫助我認爲belongs_to的和HAS_ONE爲:「存儲外鍵」之間的區別嗎?如果項目模型存儲「Issue_Id」,那麼潛在的問題可能會有很多項目。您使用HAS_ONE關係來表明即使問題可能有許多項目,它也只有一個。

但是,更常見的情況是,如果您將Project_Id存儲在問題模型中(並且我假設您是)。那麼你必須使用BELONGS_TO關係。看來您已經在上面正確定義了關係。

有人張貼有關Yii的關係在這裏過類似的問題,我幫回答: yii - using relation HAS_ONE to get data from the related table to display in list page

至於你對「需要」關注的定義關係,你不「需要」來定義所有。你可以編寫自己的SQL查詢來做同樣的事情。 ActiveRecord關係只是一個方便的事情,可以簡化相關記錄的查詢。如果你永遠不會查找問題的項目,那麼你不需要「定義」項目「BELONGS_TO」關係。

沒有真正看到你的數據庫結構,它看起來像你有一切正確設置。您現在可以輕鬆地使$ issue-> project和$ project->發佈「lazy」關係查詢,充分利用Relational Active Record的強大功能。歡呼與項目祝你好運!

1

在您的問題模型中,您已經具有指定爲BELONGS_TO項目模型的關係。

我也剛剛得到了新的yii書。這對我幫助很大!

編碼愉快:)