Yii2,很少有 1 个模型的表格具有不舒服的通用字段名称
Yii2, few tables with uncomfortable generic field names for 1 Model
我正在使用 Yii2 构建 REST++ 服务,它应该能够处理 2 table 方案,(数据库存储~相同~数据):
- a_new_one,非常适合用ActiveRecord处理;
- the_old_one,它有 1 个通用的 table 'Object',列如 'field1'、'field2',等等,还有一些额外的 tables.
我希望我的请求方法和控制器对于这两种方案都是一样的(真的很棒)。这意味着,我需要为这两种情况使用相同的模型。
问题都与the_old_one数据库有关:
假设模型用户的数据存储在 tables Object 和 UserProfile 中。如果我为两个 tables 创建 2 个 ActiveRecord classes,是否可以在 3d class User 中与它们建立 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();
我了解到,Doctrine 有简单的模型映射($user->Name 可以映射到 db 的 Object.field7),但仍然无法映射到 2 个不同的 tables 在 1 个实体中。还是我不正确?如果是这样,在 Yii2 中使用 Doctrine 是个好主意吗?
关于拥有相同控制器和模型的想法就这样结束了。只有网址保持不变。
旧的数据库模型数据可以这样获取:
$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 事件中分配很多字段。
我正在使用 Yii2 构建 REST++ 服务,它应该能够处理 2 table 方案,(数据库存储~相同~数据):
- a_new_one,非常适合用ActiveRecord处理;
- the_old_one,它有 1 个通用的 table 'Object',列如 'field1'、'field2',等等,还有一些额外的 tables.
我希望我的请求方法和控制器对于这两种方案都是一样的(真的很棒)。这意味着,我需要为这两种情况使用相同的模型。
问题都与the_old_one数据库有关: 假设模型用户的数据存储在 tables Object 和 UserProfile 中。如果我为两个 tables 创建 2 个 ActiveRecord classes,是否可以在 3d class User 中与它们建立 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();
我了解到,Doctrine 有简单的模型映射($user->Name 可以映射到 db 的 Object.field7),但仍然无法映射到 2 个不同的 tables 在 1 个实体中。还是我不正确?如果是这样,在 Yii2 中使用 Doctrine 是个好主意吗?
关于拥有相同控制器和模型的想法就这样结束了。只有网址保持不变。
旧的数据库模型数据可以这样获取:
$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 事件中分配很多字段。