我最近介绍了保存我已更新的模型的概念。在这种情况下,我创建了一个名为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()
,因为它不是同一个模型。
答案 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())....