gpt4 book ai didi

php - 如何通过输入特定月份的数据来限制用户,Yii2中存在大于特定月份的记录

转载 作者:行者123 更新时间:2023-11-29 15:25:58 25 4
gpt4 key购买 nike

我使用的是 Yii2 basic。我有一个名为 group savingdetails 的表,它存储每个组的每月储蓄。

假设我有一个小组,其成立日期是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,
]);
}

我应该改变什么?

最佳答案

让我们看看你的情况

$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
Year = 2017
Month = 9

2017 > 2017 || (2017 == 2017 && 9 > 10)
false || (true && false)
false || false
false

关于php - 如何通过输入特定月份的数据来限制用户,Yii2中存在大于特定月份的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59088569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com