【问题标题】:Retrieve the child model of a record in Yii Framework在 Yii 框架中检索记录的子模型
【发布时间】:2013-07-10 23:38:45
【问题描述】:

我正在尝试了解如何获取 CActiveRecord 模型的子类的模型。

我有以下两个基本类:

  • User扩展CActiveRecord
  • Tutor扩展User

它们之间的联系是表usersid 是表tutors 中的fk。在我当前的应用程序中,我正在实例化 User 类,但我还需要来自 Tutor 的数据。

gii 设置的关系如下:

For User class:
public function relations()
    {
        return array(
            'tutor' => array(self::HAS_MANY, 'Tutors', 'user_id'),
        );
    }


For Tutor class:
public function relations()
{
    return array(
        'user' => array(self::BELONGS_TO, 'Users', 'user_id'),
    );
}

我怎样才能得到一个填充了来自两个模型的数据的对象?

注意:我的数据库表以复数命名,而模型以单数命名。

【问题讨论】:

    标签: php oop model yii


    【解决方案1】:

    当您查询活动记录模型时,它应该自动引入相关对象(前提是您已正确设置它们的关系)。像下面这样的东西给你一个开始。

    $users=User::model()->findAll();
    

    根据您对数据的处理方式,您需要决定是延迟获取相关表还是急切地获取它们。以下将急切地获取记录。

    $users=User::model()->with('tutor')->findAll();
    

    关于这个主题的 Yii 文档非常好,值得一读: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#performing-relational-query

    【讨论】:

    • 谢谢,我知道如何获取这些对象了。
    • 我正在使用 Yii2 并以 json 格式返回数据。我不能将孩子包含在“with”中。
    【解决方案2】:

    显然,在 Yii 中可以通过以下命令访问对象的兄弟姐妹:

    $model->tutors
    

    其中tutors 表示对应兄弟的表。如果与孩子的关系是HAS_MANY,则该命令将返回一个或多个数组,每个数组都包含同级的一个实例。如果是1:1(HAS_ONE)关系,命令直接返回对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多