2010-08-26 88 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书。这对我帮助很大!

编码愉快:)