Activerecord AR模型中的关系函数,多对一关系

Activerecord AR模型中的关系函数,多对一关系,activerecord,yii,many-to-one,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_pro

下面是一个场景:

我有两张桌子,问题和项目

一个项目可以有许多问题,而一个问题只能有一个项目

由于问题是多对一的,您必须定义它吗

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

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'),
    );
}
我猜任何一对一的关系都不需要定义

先谢谢你

顺便说一句,我正在写一本关于敏捷的书,最后我问了自己这个问题。 AR类()中有一个选项


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

在您的问题模型中,您已经将关系指定为属于项目模型

我还刚刚拿到了一本新的yii书。这对我帮助很大


快乐编码:)

这有助于我将“属于”和“拥有”的区别理解为“外键存储在哪里”?如果项目模型存储了“Issue\u Id”,那么潜在的Issue可能有许多项目。您可以使用HAS_ONE关系表示,即使问题可能有多个项目,它也只有一个

但是,更常见的情况是,如果您将项目Id存储在问题模型中(我假设您是这样)。然后你必须使用归属关系。您似乎已正确定义了上述关系

有人在这里发布了一个与Yii关系相关的类似问题,我帮助回答:

至于你对“需要”定义关系的担忧,你不需要“需要”定义任何关系。您可以编写自己的SQL查询来执行相同的操作。ActiveRecord关系只是使查询相关记录变得更简单的一件方便的事情。如果你永远都不会去查找某个问题的项目,那么你就不“需要”定义“项目”属于关系

在我看来,在没有实际查看数据库结构的情况下,一切都已正确设置。现在,您可以轻松地进行$issue->project和$project->issues“惰性”关系查询,充分利用关系活动记录的功能。干杯,祝项目好运