2013-03-17 85 views
0

我有一個resume表(其中包含)position_type_id列,該列是position_type表的外鍵。從下拉列表中不轉讓的模型屬性

resume創建表單上,position type的下拉列表選項從position_type表中正確拉取,並且它們的ID設置爲選擇的值。一切似乎都進展順利。

當提交表單時,我可以驗證該值將回到在POST變量控制器,但是它們不進入該模型與屬性人口:

$model->attributes=$_POST['Resume'];

這裏是在控制器上create方法:

public function actionCreate() 
{ 
    $model=new Resume; 

    if(isset($_POST['Resume'])) 
    { 
     $model->attributes=$_POST['Resume']; 

     if($model->save()) 
     { 
      $this->redirect(array('view','id'=>$model->id)); 
     } 
    } 

    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

下面是從相關模型加載鍵的形式:

echo $form->activeDropDownList(
    $model, 
    'position_type_id', 
    CHtml::listData(PositionType::model()->findAll(),'id','name') 
); 

position_type_id是將外鍵傳遞給PositionType模型的恢復模型的關鍵。它在表格和簡歷模型上拼寫相同。模型之間的關係是:'positionType' => array(self::BELONGS_TO, 'PositionType', 'position_type_id'),

我想我可以從POST數組中獲取每個值並手動設置它們,但似乎這應該「正常工作」。設置屬性後$model上的值是手動輸入的字段的值,空白表示來自生成的下拉列表的所有字段。

這裏實際上是被生成的內容:

<select name="Resume[position_type_id]" id="Resume_position_type_id"> 
    <option value="1">English Teacher</option> 
    <option value="2">School Administrator</option> 
</select> 
+3

通過'POST'形式發佈?在您的模型的'rules()'函數中,'position_type_id'也被設置爲安全的用於批量賦值? – topher 2013-03-17 11:47:31

回答

0

我可能是錯的,但對我來說是巨大的分配是不工作。在yii中,如果我們需要對它進行大規模賦值,則需要聲明一個屬性是安全的。

所以,在你的模型Resume你有以下規則:

public function rules() { 
    return array(
     //the other rules ... 
     array('position_type_id, others_attributes', 'safe'), 
     //the rule above indicate the attributes that can be massively assigned 
    ); 
} 

A link to the wiki about the 'safe' validation rule