Yii 框架中的 HAS_ONE 关系有问题。场景如下:我们有一个与 SubscriptionType 相关的 User 类:
'subscriptionType' => array(self::HAS_ONE, 'SubscriptionType', 'subscription_type_id')
和与用户相关的 SubscriptioType:
'users' => array(self::HAS_MANY, 'User', 'subscription_type_id')
更重要的是,用户在数据库中定义了订阅类型的外键。
预定义了 3 种订阅类型,所有注册用户在注册过程中默认获得其中一种。它们保存在数据库中,所以在 registerAction 我做:
//some assignments here
$subscription = SubscriptionType::model()->find('name=:name', array(':name'=>SubscriptionType::MONTHLY));
$newUser->subscriptionType = $subscription;
if($newUser->save()){
//redirect to some page
} else {
Yii::trace('User register failed', 'application.controllers.UserController');
}
用户不会被保存。我调试了一下,我注意到,subscriptionType 已分配,但 subscription_type_id 未分配,因此 INSERT 查询引发了约束冲突。我是否必须明确设置 subscription_type_id ?这对我来说没有多大意义,因为它违背了 ORM 的想法,不是吗?