Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更新大于Yii 2中要更新的选定记录的记录_Php_Mysql_Yii_Yii2_Yii2 Basic App - Fatal编程技术网

Php 如何更新大于Yii 2中要更新的选定记录的记录

Php 如何更新大于Yii 2中要更新的选定记录的记录,php,mysql,yii,yii2,yii2-basic-app,Php,Mysql,Yii,Yii2,Yii2 Basic App,我正在使用Yii2 basic。我有一个名为groupsavingdetails的表,用于保存每月的组保存 我有Id为29的集团2017年和8月的记录。同样,我也有2017年9月、10月、11月和12月这一特定群体的记录。还有2018年以及1月和3月的数据,如图所示 过程是,8月份没有该组的条目(即,这是第一次输入数据,因此期初余额设置为0)。现在,对于9月份,8月份的期末余额作为期初余额,依此类推。所以这些都是依赖的 现在的情况是,当我想更改9月份的记录时,它的期末余额将被更改,因此新的期末

我正在使用Yii2 basic。我有一个名为groupsavingdetails的表,用于保存每月的组保存

我有Id为29的集团2017年和8月的记录。同样,我也有2017年9月、10月、11月和12月这一特定群体的记录。还有2018年以及1月和3月的数据,如图所示

过程是,8月份没有该组的条目(即,这是第一次输入数据,因此期初余额设置为0)。现在,对于9月份,8月份的期末余额作为期初余额,依此类推。所以这些都是依赖的

现在的情况是,当我想更改9月份的记录时,它的期末余额将被更改,因此新的期末余额将被设置为10月份的期初余额,依此类推。我应该怎么做?

下面是actionUpdate函数,它给我的错误是调用数组上的成员函数save()


    public function actionUpdate($id) {
        $model = $this->findModel($id);

        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model);
        }

        if ($model->load(Yii::$app->request->post())) {

            $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM groupsavingdetails WHERE ((groupsavingdetails.GroupId=:Id and Year>=:year and Month>:month) OR (GroupId=:Id and Year>:year AND Month>0))')->bindValues([':Id' => $model->GroupId, ':year' => $model->Year, ':month' => $model->Month]->queryAll();


            if ($count == 0) {

            }

            if ($count == 1) {

            }

            if ($count > 1) {

                if ($model->LoanGiven != 0) {
                    $model->TotalValueofLoanGiven += $model->LoanGiven;
                }



                if ($model->LoanRecovery != 0) {
                    $model->LoanRepaidUptilNow += $model->LoanRecovery;
                }


                $model->TotalValueOfLoanOutstanding = $model->TotalValueofLoanGiven - $model->LoanRepaidUptilNow;

                $model->ClosingBalance = ($model->OpeningBalance + $model->TotalSaving + $model->LoanRecovery + $model->LoanInterest + $model->Fine + $model->BankInterest + $model->BankLoan - $model->Expenses - $model->LoanGiven);



                $groups = Yii::$app->db->createCommand('SELECT * FROM groupsavingdetails WHERE ((groupsavingdetails.GroupId=:Id and Year>=:year and Month>:month) OR (GroupId=:Id and Year>:year AND Month>0))')->bindValues([':Id' => $model->GroupId, ':year' => $model->Year, ':month' => $model->Month])->queryAll();


                foreach ($groups as $k => $group) {
                    if ($k == 0) {

                        $groups[$k]['OpeningBalance'] = $model->ClosingBalance;
                        $groups[$k]['TotalValueofLoanGiven'] = $model->TotalValueofLoanGiven;
                        $groups[$k]['LoanRepaidUptilNow'] = $model->LoanRepaidUptilNow;
                        $groups[$k]['TotalValueOfLoanOutstanding'] = $model->TotalValueOfLoanOutstanding;
                    }
                }


                $groups->save();   // Here it gives me error even if i write $groups[$k]->save()

                $model->save();



                return $this->redirect(['view', 'id' => $model->GroupSavingDetailsId]);
            }
        } else {
            return $this->render('update', ['model' => $model,]);
        }
    }

不能对数组调用
save()
(或任何其他函数)。对对象调用函数。因此,您必须确保您有一个对象,将数据加载到该对象上,然后保存该对象。你可以这样做:

foreach($k=>$group的组){
如果($k==0){
$groupModel=new GroupSavingDetails();//或任何调用该模型的内容。。
//将数据加载到模型中
$groupModel->OpeningBalance=$model->ClosingBalance;
$groupModel->TotalValueofLangEvent=$model->TotalValueofLangEvent;
$groupModel->LoanRepaidUptilNow=$model->LoanRepaidUptilNow;
$groupModel->TotalValueOfLoanOutstanding=$model->TotalValueOfLoanOutstanding;
//保存模型
$groupModel->save();
}
}
//不要在foreach之后保存$groups,因为这仍然是一个数组
这将(可能/希望)修复代码。但这可能仍然不是最好的方法。似乎您也可以通过一个
UPDATE
查询来完成所有这些记录的更新。我没有测试下面的代码,但这将创建一个更新查询,可以修改该查询以更新正确的行。这样,您就不必检索所有单独的记录,逐个更新它们,并为每一行运行更新命令

Yii::$app->createCommand()->更新(
'groupsavingdetails'、//或groupsavingdetails::tableName()
[
“OpeningBalance”=>$model->ClosingBalance;
'TotalValueOfAngiven'=>$model->TotalValueOfAngiven,
“LoanRepaidTilnow”=>$model->LoanRepaidTilnow,
'TotalValueOfLoanOutstanding'=>$model->TotalValueOfLoanOutstanding,
],
[
或",,
[
"及",,
['GroupId'=>$model->GroupId],
['>=','年',$model->Year],
['>','月',$model->Month],
],
[
'和',
['GroupId'=>$model->GroupId],
['>','年',$model->Year],
['>','月',0],
],
]
)->执行()

因为“$groups”是一个数组。不是model的对象所以我应该更改什么。您的模型名是什么$model=new Groupsavingdetails();谢谢你的参考