Yii フレームワークの HAS_ONE 関係に問題があります。シナリオは次のとおりです。SubscriptionType に関連する User クラスがあります。
'subscriptionType' => array(self::HAS_ONE, 'SubscriptionType', 'subscription_type_id')
User に関連する SubscriptioType:
'users' => array(self::HAS_MANY, 'User', 'subscription_type_id')
さらに、ユーザーはデータベースで定義された SubscriptionType への外部キーを持っています。
事前定義された 3 つのサブスクリプション タイプがあり、すべての登録ユーザーは、登録時にデフォルトでいずれかを取得します。それらはDBに保存されるので、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の考え方に反するので、あまり意味がありませんね。