2012-10-12 22 views
0

我無法在控制器中爲某些基本功能輸出動作佈局。我有一個提供帳戶基本信息的視圖。帳戶跨越多個領域,因此用戶最有可能經常進行保存。我所經歷的是,每次我進行保存時,都會創建一個新行。 actionCreate被調用,它只是在表中的數據轉儲。我一定會保持用戶在所有數據填充在同一接口。Yii:控制器在同一動作方法中處理記錄創建和更新的操作

從我迄今爲止收集的,我不能有actionCreate方法的操作參數,因爲它失敗,因爲它是第一次保存爲空。

繼從我actionCreate控制方法的代碼片段:

public function actionCreate() 
{ 
    $model=new Account; 
    $accaddress=new AccAddress; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

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

     if($model->save()) //Account data saving 

      if (isset($_POST['AccAddress'])){ 
      //Yii::log('Dumping infomration for multiple models.'); 
      $accaddress->attributes=$_POST['AccAddress']; 
      $accaddress->acc_id=$model->id; 


      if ($pataddress->save()){//Account address saving 
      } 
      //$this->redirect(array('create','id'=>$model->id)); 
      } 
    } 

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

焦急期待的建議/意見。提前致謝。

問候,費薩爾

+0

您需要發佈代碼才能查看您做錯了什麼,但網絡上的任何教程都會在此階段爲您提供幫助。 – Pentium10

+0

@Pentium,請看看,我只是添加了代碼。 – FaisalKhan

+0

你的模型在哪裏:findByPk()調用來加載現有的記錄? – Pentium10

回答

0

看起來你正在使用GII生成的代碼,這是很好的。你的帖子中有些不清楚究竟是哪裏出了問題,但是這裏有一些事情要檢查?

這是用戶提交的數據有什麼不正確的問題,他們需要修復它?如果是這樣,那麼你需要使用validation rules

您是否使用相同的表單創建和更新記錄?如果是這樣,那麼你需要確保你在某處包含ID作爲隱藏的表單字段。當您運行$model->attributes=$_POST['Account'];時,如果ID是$_POST['Account']中發生的其中一個字段,它將能夠更新現有記錄的唯一方法是。

問題與帳戶地址?例如,您是否試圖將多個帳戶地址模型附加到一個帳戶?如果是這樣,你需要在這裏添加邏輯來處理多種可能的模型。

希望這些幫助之一。

+0

謝謝喬舒亞,存儲在隱藏變量的ID是有道理的,讓我嘗試一下,然後回來...... – FaisalKhan

+0

如果你使用的是Gii生成的代碼,確保也使用Gii生成的視圖,因爲它們完美地工作串聯。 – Joshua

+0

我相信你提出的方法是正確的,但現在我再次轉圈。我設法將Id存儲在隱藏變量中,但在下一次提交時,未能將Id屬性設置爲「不安全」。如果我確保安全,那麼我不會獲得新的記錄ID,以便我可以將它發送給隱藏的變量。對Yii來說,這是奇怪的,我會在8-9小時內繼續我的工作,然後更新這個線程......同時,如果碰巧碰到任何東西,請刪除一行。非常感謝:) – FaisalKhan

相關問題