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