多模型关系

时间:2012-04-12 18:07:24

标签: yii

我有3张桌子

用户

id name

管理器

id user_id

项目

id manager_id

从项目模型中,如何在用户表中显示名称。

yii建立经理和项目之间的关系

'managers'=>数组(self :: BELONGS_TO,'manager','manager_id'),

所以在视图中我可以显示managers.user_id。

但是我可以在项目管理者之间建立关系,然后在管理者与用户之间建立关系并获取用户名 在项目表中

例如,对于projects表中的每个manager_id,我想在manager表中查找该manager的user_id,然后在User表中找到用户名?

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

你应该看看here。通过在关系查询中使用“通过”,您将能够从项目实体中获取用户并获得所需的所有属性。

答案 1 :(得分:0)

您可以背靠背使用两种关系来检索该信息:

$project = Project::model()->with('manager.user')->findByPk((int)$id);
print $project->manager->user->name;

第一行检索项目并急切加载管理器和用户信息。但即使没有急切的加载,Yii也会加载(它只需要两次数据库查询)。另请注意BELONGS_TO关系使用单数名称。它使得关系的另一端更加清晰。

我还建议考虑将经理和用户表合并到一个表中,除非您确定需要将它们分开。然后将isManager布尔值添加到User表中,并将manager_id直接链接到用户表。

如果您需要一个单独的管理员模型,您可以随时为使用用户表的管理器创建一个新模型,继承用户模型并定义一个defaultScope(),它根据isManager布尔值过滤管理器。

class Manager extends User
{
    public function defaultScope()
    {
        return array(
            'condition'=>'isManager=1',
        );
    }
}

Yii要做很多很酷的事情!