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