AR模型中的关系功能,多对一关系

时间:2010-08-26 21:54:16

标签: activerecord yii many-to-one

所以这是场景:

我有两张桌子,问题&项目。

项目可以有很多问题,而问题可以只有一个项目。

由于问题是多对一的,你是否必须定义它?

因为我知道项目模型我有:

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)。

但是出于某种原因,这种情况是否可选?

2 个答案:

答案 0 :(得分:5)

这有助于我将BELONGS_TO和HAS_ONE之间的区别视为“存储外键的位置”?如果项目模型存储“Issue_Id”,那么潜在的问题可能有很多项目。您使用HAS_ONE关系来声明即使Issue COULD有很多项目,它也只有一个。

但是,更常见的情况是如果您将Project_Id存储在Issue模型中(我假设您是)。然后你必须使用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->发出“懒惰”关系查询,充分利用关系活动记录的强大功能。干杯,祝你好运!

答案 1 :(得分:1)

在您的问题模型中,您已经将指定为BELONGS_TO的关系作为项目模型。

我也刚拿到了新的yii-book。它帮了我很多!

快乐编码:)