我正在使用Yii2 basic。我有一个名为groupsavingdetails的表,该表存储每个组的每月节省量。
假设我有一个小组的成立日期是2017-08-08。现在,在为该组创建月度保存记录时,我将选择该组,输入年为2017,月为8月,然后输入所有值,这些值将使我获得8月的期末余额并保存在数据库中。
现在,当用户想要输入10月而不是9月的月份时,他可以执行此操作,因为系统会将8月的期末余额显示为期初余额,并且他将在10月的月份中进行与8月相同的操作。
现在,在10月进行输入后,用户将不能再输入9月的记录。
我有该群体在2017年以及从8月,9月,10月,11月和12月开始的记录。
会发生什么情况,当我输入年份(2018年)和月份(1月)时,将显示警报消息,该消息不应显示。
在保存记录时条件失败。
$group = Yii::$app->db->createCommand('SELECT *
FROM groupsavingdetails
where groupsavingdetails.GroupId=:id
ORDER BY groupsavingdetails.GroupSavingDetailsId DESC LIMIT 1')
->bindValues([
':id' => $model->GroupId,
])->queryAll();
$year2=0;
$month3=0;
foreach($group as $groups) {
$model->OpeningBalance=$groups['ClosingBalance'];
$model->TotalValueofLoanGiven=$groups['TotalValueofLoanGiven'];
$model->LoanRepaidUptilNow=$groups['LoanRepaidUptilNow'];
$model->TotalValueOfLoanOutstanding=$groups['TotalValueOfLoanOutstanding'];
$year2=$groups['Year'];
$month3=$groups['Month'];
}
$identity = \Yii::$app->user->identity;
$eid = $identity->id;
$model->EmpId = $eid;
if($model->LoanGiven!=0) {
$model->TotalValueofLoanGiven+=$model->LoanGiven;
}
if($model->LoanRecovery!=0) {
$model->LoanRepaidUptilNow+=$model->LoanRecovery;
}
$model->TotalValueOfLoanOutstanding = $model->TotalValueofLoanGiven-$model->LoanRepaidUptilNow;
$previousMonth = $model->Month - 1;
if ($previousMonth == 0) {
$previousMonth = 12;
$year2--;
}
// Here the condition is getting failed.
if ($model->Year >= $year2 && $model->Month > $previousMonth) {
$model->ClosingBalance=($model->OpeningBalance+$model->TotalSaving+$model->LoanRecovery+$model->LoanInterest+$model->Fine+$model->BankInterest+$model->BankLoan-$model->Expenses-$model->LoanGiven);
$model->save();
} else {
echo "<script language='javascript'>";
echo "alert('Records greater than selected year and month exists.')";
echo "</script>";
return $this->render('create', [
'model' => $model,
]);
}
我应该改变什么?
答案 0 :(得分:0)
让我们看看你的状况
$model->Year >= $year2 && $model->Month > $previousMonth
在您的情况下,有两个表达式与和(&&
)结合在一起。这意味着两个表达式都必须为真,整个条件才能为真。
我们有$year2 = 2017
和$previousMonth = 10
(十月)。
现在将$ model-> Year设置为2018,将$ model-> Month设置为1(一月)。
条件中的第一个表达式是2018 >= 2017
。这部分是true
。但是第二个表达式是1 > 10
。然后false
将产生true && false
。
您真正需要做的是仅在年份相同时检查月份。因此,您要寻找的条件是:
false
这种情况将像这样工作:
$model->Year > $year2 || ($model->Year == $year2 && $model->Month > $previousMonth)
Year = 2018
Month = 1
2018 > 2017 || (2018 == 2017 && 1 > 10)
true || (false && false)
true || false
true
Year = 2017
Month = 11
2017 > 2017 || (2017 == 2017 && 11 > 10)
false || (true && true)
false || true
true