我正在使用Yii2构建REST ++服务,它应该能够处理2个表格方案(数据库存储~~相同的数据):
我希望我的请求方法和控制器对于两种方案都是相同的(非常好,真的)。这意味着,我需要为这两种情况设置相同的模型。
麻烦都与 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会是个好主意吗?
答案 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事件中分配很多字段。