Yii框架中的HAS_ONE关系有问题。该方案是如下: 我们有一个用户类关系SubscriptionType:Yii HAS_ONE关系不保存外键
'subscriptionType' => array(self::HAS_ONE, 'SubscriptionType', 'subscription_type_id')
和S SubscriptioType与有关用户:
'users' => array(self::HAS_MANY, 'User', 'subscription_type_id')
更重要的是,用户有一个外键SubscriptionType在数据库中定义。
预定义了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的想法,不是吗?
嗨!谢谢你的评论。我改变了与BELONGS_TO的关系,这是有道理的。但你能解释我一件事吗。你的意思是我总是必须手动设置其他相关模型的subscription_type_id和其他ID?那么在关系()中定义的CActiveRecord字段总是只读的?我不太喜欢这种方法:/ – Mat
使用$ newUser-> subscription_type_id = $ subscription-> id。在User模型上设置subscriptionType关系不会自动设置User模型本身的任何属性。 – jmarkmurphy
感谢您的回答,我现在就做,但我仍然不喜欢这种做法:(无论如何,谢谢! – Mat