【问题标题】:multi model relation多模型关系
【发布时间】:2012-04-12 18:07:24
【问题描述】:

我有 3 张桌子

用户

身份证名称

经理

id user_id

项目

id manager_id

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

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

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

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

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

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

感谢任何帮助。谢谢。

【问题讨论】:

    标签: yii


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      $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 可以做很多很酷的事情!

      【讨论】:

        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 2019-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-22
        • 1970-01-01
        • 2021-02-21
        相关资源
        最近更新 更多