ORM关系(可能是Kohana特定的)

时间:2013-05-05 19:53:31

标签: php mysql orm kohana

我有几个型号,一个是通知,一个是严重性。通知具有严重性。

我的数据库中的My Notifications表(简化)如下

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作为关系的这一方。

我希望能够直接从通知对象访问严重性,即$ notification-> severity-> name等。

我还试过在这个关系的另一端设置一个has_many关系,如下所示,这样我就可以访问具有特定优先级的所有通知的列表。

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

我做错了什么?

编辑:如果需要,我可以更改数据库和/或代码。

1 个答案:

答案 0 :(得分:1)

您需要在关系的两侧使用相同的foreign_key has_many 还需要相应的部分 belongs_to

has_many表示“ownage”,就像has_one一样,而belongs_to表示“被拥有”。因此,您不能让一个站点拥有另一个站点,但另一个站点也拥有该站点(除非您有 has_many_through )。这意味着当一方有has_one / has_many模型时,相应的一方需要属于_to。

通知

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

NotificationSeverity

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