myt*_*mer 2 activerecord many-to-one yii
所以这是场景:
我有两个表,问题和项目.
一个项目可以有很多问题,一个问题可以只有一个项目.
由于问题是多对一的,你必须定义它吗?
因为我知道项目模型我有:
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)'),
);
}
Run Code Online (Sandbox Code Playgroud)
对于问题模型我只有外键:
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'),
);
}
Run Code Online (Sandbox Code Playgroud)
我猜任何一个关系都不需要定义?
先感谢您.
顺便说一句,我正在做敏捷的Yii书,最后我问自己这个问题.AR类中有一个选项(http://www.yiiframework.com/doc/guide/database.arr).
但由于某种原因,这种情况是否可选?
这有助于我将BELONGS_TO和HAS_ONE之间的区别视为"存储外键的位置"?如果项目模型存储"Issue_Id",那么潜在的问题可能有很多项目.您使用HAS_ONE关系来声明即使Issue COULD有很多项目,它也只有一个.
但是,更常见的情况是,如果您将Project_Id存储在Issue模型中(我假设您是).然后你必须使用BELONGS_TO关系.您似乎已在上方正确定义了关系.
有人在这里发布了一个与Yii关系类似的问题,我帮助回答: yii - 使用关系HAS_ONE从相关表中获取数据以显示在列表页面中
至于你对"需要"定义关系的关注,你不需要"定义"任何关系.您可以编写自己的SQL查询来执行相同的操作.ActiveRecord关系只是简单地查询相关记录的便利之处.如果您永远不会查找问题的项目,那么您"不需要"定义"项目"BELONGS_TO关系.
在没有真正看到您的数据库结构的情况下,我认为您已经正确设置了所有内容.您现在可以轻松地使$ issue-> project和$ project->发出"懒惰"关系查询,充分利用关系活动记录的强大功能.欢呼和项目的好运!
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |