2013-05-05 50 views
0

我有幾個模型,一個是通知,一個是嚴重性。通知具有嚴重性。在我的數據庫ORM關係(可能Kohana特定)

我的通知表(簡化)如下

id => int 
message => text 
severity_id => int 

我嚴重性表有以下幾列

id => int 
name => varchar(20) 

在我通知模型,我有以下關係

protected $_has_one = array(
    'severity' => array(
     'model' => 'NotificationSeverity', 
     'foreign_key' => 'id') 
); 

我不知道如何告訴它使用severity_id作爲這一邊的t他的關係雖然。

我希望能夠直接從通知對象即$通知 - > severity->姓名等

我還通過設置這種關係作爲另一側的has_many關係試圖訪問的嚴重性以便我可以訪問具有特定優先級的所有通知的列表。

protected $_has_many = array(
    'notifications' => array('model' => 'Notification', 
    'foreign_key' => 'severity_id') 
); 

我在做什麼錯?

編輯:如果需要,我可以更改數據庫和/或代碼。

回答

1

您需要在關係的兩側使用相同的foreign_key。另外has_many需要相應的部分爲belongs_to

has_many的意思是「擁有」就像has_one一樣,而belongs_to則意味着「擁有」。所以你不能擁有一個網站擁有另一個網站,但另一個網站擁有一個網站(除非你有has_many_through)。這意味着當一方has_one/has_many模型時,相應的一方需要屬於(s)_to。

通知

$_belongs_to = array(
    'severity' => array(
     'model' => 'NotificationSeverity', 
     'foreign_key' => 'severity_id', 
    ) 
); 

NotificationSeverity

$_has_many = array(
    'notifications' => array(
     'model' => 'Notification', 
     'foreign_key' => 'severity_id', 
    ) 
); 
+0

爲什麼屬於,而不是有一個?當通知不屬於嚴重性時,擁有屬於關係的信息是沒有意義的。 – 2013-05-05 20:10:37

+0

通知將'severity_id'保存在其表中,所以它屬於它,不是嗎? – kero 2013-05-05 20:11:43

+0

通知有嚴重性,這是我眼中唯一的關係。嚴重程度不應該真正瞭解通知。 – 2013-05-05 20:13:01