Php 如何更新大于Yii 2中要更新的选定记录的记录
我正在使用Yii2 basic。我有一个名为groupsavingdetails的表,用于保存每月的组保存 我有Id为29的集团2017年和8月的记录。同样,我也有2017年9月、10月、11月和12月这一特定群体的记录。还有2018年以及1月和3月的数据,如图所示 过程是,8月份没有该组的条目(即,这是第一次输入数据,因此期初余额设置为0)。现在,对于9月份,8月份的期末余额作为期初余额,依此类推。所以这些都是依赖的 现在的情况是,当我想更改9月份的记录时,它的期末余额将被更改,因此新的期末余额将被设置为10月份的期初余额,依此类推。我应该怎么做? 下面是actionUpdate函数,它给我的错误是调用数组上的成员函数save()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月份的记录时,它的期末余额将被更改,因此新的期末
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();谢谢你的参考