【问题标题】:Relations function in AR Model, many to one relationshipAR模型中的关系函数,多对一关系
【发布时间】:2010-08-26 21:54:16
【问题描述】:

所以这是场景:

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

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

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

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

【问题讨论】:

    标签: activerecord yii many-to-one


    【解决方案1】:

    这有助于我将 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->issues “惰性”关系查询,充分利用关系活动记录的强大功能。干杯,祝项目好运!

    【讨论】:

      【解决方案2】:

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

      我也刚拿到新的 yii 书。对我帮助很大!

      编码愉快:)

      【讨论】:

        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 2013-11-20
        • 2014-05-06
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多