首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多模型关系

多模型关系
EN

Stack Overflow用户
提问于 2012-04-13 02:07:24
回答 2查看 375关注 0票数 0

我有三张桌子

用户

id名称

经理

id user_id

项目

id manager_id

在projects模型中,如何在用户表中显示名称。

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

‘'managers’管理器数组(self::BELONGS_TO,‘=>’,'manager_id'),

因此,我可以在视图中显示managers.user_id。

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

例如,对于projects表中的每个经理,在manager_id表中查找该经理的user_id,然后在user表中找到用户名?

任何帮助都是非常感谢的。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-04-13 03:56:24

你应该看看here。通过在您的关系查询中使用'through‘,您将能够从项目实体访问用户,并获得您想要的所有属性。

票数 0
EN

Stack Overflow用户

发布于 2012-04-13 11:57:53

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

代码语言:javascript
复制
$project = Project::model()->with('manager.user')->findByPk((int)$id);
print $project->manager->user->name;

第一行检索项目并急切加载经理和用户信息。但是,即使没有立即加载,Yii也会加载内容(只需再执行两次数据库查询)。还要注意在BELONGS_TO关系中使用单数名称。这让关系的另一端变得更加清晰。

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

如果您需要为经理创建一个单独的模型,您可以始终为经理创建一个新的模型,该模型使用用户表,继承自用户模型,并定义一个defaultScope(),它根据isManager布尔值向下过滤经理...

代码语言:javascript
复制
class Manager extends User
{
    public function defaultScope()
    {
        return array(
            'condition'=>'isManager=1',
        );
    }
}

有那么多很酷的事情要和Yii一起去做!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10129248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档