2013-01-25 52 views
3

其他型號的領域中所需的字段我需要存儲在第一個模型的記錄。它有大約10個領域。現在,我需要應用所需的規則,我存儲在SECOND模型中的一個字段,我從第三個模型中獲取這個字段的值(這是一個下拉字段)在警予

我該如何做到這一點在yii中必須填寫?

任何一個可以幫助請..

非常感謝,

+0

如果你有在第二模型所需的規則,並傳遞一個第二個模型實例的形式,那麼它應該共同努力 –

+0

所以我不必須發明第一模型所需的規則? – Developer

+0

看到http://stackoverflow.com/questions/10405649/yii-dynamically-change-rules-from-controller –

回答

0

你可以到一個模型添加附加屬性和規則。您不必僅使用與數據庫表中的字段直接相關的屬性。我們來看一個基本的例子。你有一個用戶(用戶)表,該表具有以下字段:

  • ID
  • 電子郵件
  • 密碼

而且你必須存儲的用戶配置文件的另一表(用戶配置),它具有信息結構:

  • ID
  • USER_ID
  • 國家

當用戶創建自己的帳戶,你會捕捉他們的信息的一種形式。您的用戶模型將有這樣的規則:

array('email, password', 'required'), 
array('email', 'unique', 'message'=>'Email already in use'), 
... 

您可以爲國家添加屬性到您的用戶模型像這樣:

class User extends CActiveRecord { 
    public $country; 
    ... 

然後在你的規則,你可以添加新的屬性:

array('email, password, country', 'required'), 
array('email', 'unique', 'message'=>'Email already in use'), 
... 

country屬性現在將成爲您的用戶模型的一部分。現在,您可以添加到您的窗體:

<?php echo $form->dropDownList($model,'country',CHtml::listData(Country::model()->findAll(),'id','country_name'),array('empty'=>'-- select a country --')); ?> 

現在在你的表單提交,該$model->validate()方法將驗證鄉間田野。你可以手動保存到你的第二個模型(UserProfile),如:

if(isset($_POST['User'])){ 
    if ($model->validate()){ 
     $user_profile = new UserProfile; 
     $user_profile->user_id = $model->id; 
     $user_profile->country = $model->country; 
     $user_profile->save(); 
     ... 

希望能回答你的問題。

+0

感謝愛斯基摩人..我會嘗試它 – Developer

+0

沒問題,讓我知道如果你卡住了 –