Activerecord Yii2,少数表具有1个模型的通用字段名

Activerecord Yii2,少数表具有1个模型的通用字段名,activerecord,architecture,yii2,Activerecord,Architecture,Yii2,我正在用Yii2构建REST++服务,它应该能够处理2个表模式(存储~the~ same~数据的数据库): 一款全新的,非常适合用ActiveRecord处理 旧表,它有一个通用表“Object”,其中包含“field1”、“field2”等列,并且很少有其他表 我希望我的请求方法和控制器对于这两个方案都是相同的(这将非常好,真的)。这意味着,对于这两种情况,我需要使用相同的模型 所有问题都与旧数据库有关: 假设模型用户的数据存储在表Object和UserProfile中。如果我为两个表都创建了

我正在用Yii2构建REST++服务,它应该能够处理2个表模式(存储~the~ same~数据的数据库):

  • 一款全新的,非常适合用ActiveRecord处理
  • 旧表,它有一个通用表“Object”,其中包含“field1”、“field2”等列,并且很少有其他表
  • 我希望我的请求方法和控制器对于这两个方案都是相同的(这将非常好,真的)。这意味着,对于这两种情况,我需要使用相同的模型

    所有问题都与旧数据库有关: 假设模型用户的数据存储在表ObjectUserProfile中。如果我为两个表都创建了两个ActiveRecord类,是否可以在3d classUser中创建与它们的hasOne()关系(此处不确定继承),以便可以像这样操作:

    $user = User::find()->someFilters()->someOrderingAndPagination()->one();
    $user->Name = $your_new_name;
    $user->Age = $why_not_90;
    $user->save();
    // and so on.
    
    $user = User::find()->notSureAboutRelations()
        ->filters()->ordering()->pagination()->one();
    $user->object->field7 = $your_new_name;
    $user->userProfile->Age = $why_not_90;
    $user->save();
    
    因为我真的不想被迫这样写:

    $user = User::find()->someFilters()->someOrderingAndPagination()->one();
    $user->Name = $your_new_name;
    $user->Age = $why_not_90;
    $user->save();
    // and so on.
    
    $user = User::find()->notSureAboutRelations()
        ->filters()->ordering()->pagination()->one();
    $user->object->field7 = $your_new_name;
    $user->userProfile->Age = $why_not_90;
    $user->save();
    

    我了解到,原则具有简单的模型映射($user->Name可以映射到db的Object.field7),但仍然不可能映射到一个实体中的两个不同表。还是我错了?如果是这样的话,在Yii2中使用原则是否是一个好主意?

    因此,在idea中使用相同的控制器和模型。只有URL保持不变

    旧db模型数据可通过以下方式获得:

    $user = User::find()
      ->select([
        'Object.field7 as Name',
        'UserProfile.Age as Age',
        // ...
      ])->from('Object')
      ->join('UserProfile', ['UserProfile.ObjectId = Object.Id'])
      ->andWhere('User.Id' => $id);
    

    在保存这些模型时,这是一个丑陋的混乱。因为在插入之前、更新事件之前,您需要在中分配大量字段。

    因此,idea结束后,您将拥有相同的控制器和模型。只有URL保持不变

    旧db模型数据可通过以下方式获得:

    $user = User::find()
      ->select([
        'Object.field7 as Name',
        'UserProfile.Age as Age',
        // ...
      ])->from('Object')
      ->join('UserProfile', ['UserProfile.ObjectId = Object.Id'])
      ->andWhere('User.Id' => $id);
    
    在保存这些模型时,这是一个丑陋的混乱。因为在插入之前、更新事件之前,您需要在中分配许多字段