0

我有 3 张桌子

用户

身份证名称

经理

id user_id

项目

id manager_id

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

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

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

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

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

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

任何帮助表示赞赏。谢谢。

4

2 回答 2

0

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

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

第一行检索项目并预先加载经理和用户信息。但是即使没有急切的加载,Yii 也会加载(它只需要另外两个数据库查询)。还要注意 BELONGS_TO 关系使用单数名称。它使关系的另一端更清楚。

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

如果您需要一个单独的管理器模型,您总是可以为使用用户表的管理器创建一个新模型,从用户模型继承并定义一个 defaultScope(),它通过 isManager 布尔值过滤管理器...

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

Yii 可以做很多很酷的事情!

于 2012-04-13T03:57:53.020 回答
0

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

于 2012-04-12T19:56:24.057 回答