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

2024-05-10

所以这是场景:

我有两个表,问题和项目。

一个项目可以有多个问题,一个问题只能是一个项目。

既然Issue是多对一的,那么你必须定义它吗?

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

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 http://www.yiiframework.com/doc/guide/database.arr).

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


它帮助我将 BELONGS_TO 和 HAS_ONE 之间的区别视为“外键存储在哪里”?如果项目模型存储“Issue_Id”,则潜在问题可能有许多项目。您使用 HAS_ONE 关系来声明即使问题可以有许多项目,它也只有一个。

但是,更常见的情况是您将 Project_Id 存储在问题模型中(我假设您是这样)。那么你必须使用 BELONGS_TO 关系。看来您在上面已经正确定义了关系。

有人在这里发布了一个与 Yii 关系相关的类似问题,我帮助回答:yii - 使用关系 HAS_ONE 从相关表中获取数据以显示在列表页面中 https://stackoverflow.com/questions/3309084/yii-using-relation-has-one-to-get-data-from-the-related-table-to-display-in-lis/

至于您担心“需要”定义关系,您并不“需要”定义任何关系。您可以编写自己的 SQL 查询来执行相同的操作。 ActiveRecord 关系只是一个方便的东西,可以使相关记录的查询变得更简单。如果您永远不会查找问题的项目,那么您“不需要”定义“项目”BELONGS_TO 关系。

在没有实际看到您的数据库结构的情况下,在我看来您的所有设置都正确。现在,您可以轻松地创建 $issue->project 和 $project->issues “惰性”关系查询,充分利用关系活动记录的强大功能。干杯并祝项目顺利!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AR模型中的关系函数,多对一关系 的相关文章

随机推荐