2014-07-14 103 views
1

我最近已經介紹了保存我更新的模型的概念。在這種情況下,我創建了一個名爲incrementPayList的函數,它接收列表的id並將其增加1。哪裏可以保存模型 - Yii

這是在paylist模型

public function incrementPayList($id) 
{ 
    $results = Recipient::model()->findAll(array("condition"=>"list_id = $id")); 
    $count = count ($results); 
    $this->num_indv = $count + 1;   
} 

現在在收件人控制器,我調用這個函數的函數的代碼。收件人包含所有誰是連接到一個特定的payList

*/ 
public function actionCreate($id) 
{ 
    $model=new Recipient; 
    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

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

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

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

我知道$count返回正確數量的個人的 - 但它不保存在該領域num_indv該計數。我有一個暗示,這是因爲我沒有保存新的PayList模型。但是,我應該如何/在哪裏做這件事?我應該在函數本身內部執行嗎?或者我應該在控制器中執行它?但是,如果我在控制器中這樣做,我不能簡單地使用$model->save(),因爲它不是同一個型號。

回答

0

可以節省這樣

$modelPaylist = new Paylist; 

    if(modelPaylist->save()).... 
+0

這是在模型中還是在控制器中? – Stephen

+0

在收件人控制器 –

1

它不工作的原因是,你是不是在Paylist實例$model運行incrementPayList,但是,Recipient單(見Difference between static class and singleton pattern?Best practice on PHP singleton classes獲取更多信息) 。

您的代碼應閱讀:

$model->attributes=$_POST['Recipient']; 
$model->incrementPayList($id); 
if($model->save()) 
    { 

還可以使用CActiveRecord::count()代替findAll其次count($results),因爲你只需要數量,而不是項目本身。

+0

$ model-> incrementPayList($ id);如果$模型是作爲新的收件人模型形成的,則工作。你是否說我應該在收件人模型中放置incrementPayList呢? – Stephen

+0

糾正我,如果我錯了,但'incrementPayList'設置單個記錄的'num_indv'。每個'CActiveRecord'代表一條記錄,因此它應該從'$ model'中調用,而不是'Recipient :: model()' – topher