Yii2,少数几个表格,1个模型的通用字段名称令人不舒服

时间:2015-10-01 17:10:34

标签: activerecord architecture yii2

我正在使用Yii2构建REST ++服务,它应该能够处理2个表格方案(数据库存储~~相同的数据):

  1. a_new_one ,非常适合使用ActiveRecord处理;
  2. the_old_one ,其中包含1个通用表格'对象'使用' field1',' field2'等列,以及其他几个表。
  3. 我希望我的请求方法和控制器对于两种方案都是相同的(非常好,真的)。这意味着,我需要为这两种情况设置相同的模型。

    麻烦都与 the_old_one 数据库有关: 假设模型User的数据存储在表对象 UserProfile 中。如果我为两个表创建2个ActiveRecord类,是否可以在3d类用户(不确定这里的继承)中与它们建立hasOne()关系,因此可以像这样操作:< / p>

    $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();
    

    我了解到, Doctrine 具有简单的模型映射($ user-&gt; Name可以映射到db&#39; s Object.field7),但它仍然无法映射到1个实体内的2个不同的表。还是我错了?如果是这样,在Yii2中使用Doctrine会是个好主意吗?

1 个答案:

答案 0 :(得分:0)

因此完成了拥有相同控制器和模型的想法。只有网址保持不变。

旧的db Model数据可以通过这种方式获得:

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

保存这些模型时,这是一个丑陋的混乱。你需要在BEFORE_INSERT,BEFORE_UPDATE事件中分配很多字段。