在哪里保存模型 - Yii

时间:2014-07-14 09:22:53

标签: php yii model

我最近介绍了保存我已更新的模型的概念。在这种情况下,我创建了一个名为incrementPayList的函数,它接受列表的id并将其递增1。

这是薪资单模型中的功能代码

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(),因为它不是同一个模型。

2 个答案:

答案 0 :(得分:1)

它不起作用的原因是您没有在Paylist实例incrementPayList上运行$model,而是在Recipient单身上运行{{3} }和Difference between static class and singleton pattern?了解更多信息)。

您的代码应为:

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

还可以使用Best practice on PHP singleton classes代替findAll,然后使用count($results),因为您只需要数字,而不是项目本身。

答案 1 :(得分:0)

你可以像这样保存

$modelPaylist = new Paylist;

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