繁体   English   中英

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

[英]How to restrict user by entering data for specific month where records greater than secific month exists in Yii2

我正在使用 Yii2 基础版。 我有一个名为 groupsavingdetails 的表,它存储每个组的每月储蓄。

假设我有一个小组,其成立日期是 2017-08-08。 现在,在为该组创建每月储蓄记录时,我将选择该组,输入年份为 2017 年,月份输入为 8 月,然后输入所有值,这些值将为我提供 8 月的期末余额并保存在数据库中。

现在,当用户想要输入 10 月份而不是 9 月份时,他可以这样做,因为系统会将 8 月份的期末余额显示为期初余额,他将在 10 月份进行与 8 月份相同的操作。

现在,在输入 10 月之后,用户不能输入 9 月的记录。

我有该组 2017 年以及 8 月、9 月、10 月、11 月和 12 月的记录。

发生的情况是,当我输入年份为 2018 年和月份为一月时,会显示不应显示的警告消息。

此处条件在保存记录时失败。

$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

在您的情况下,有两个表达式与and ( && ) 连接。 这意味着两个表达式都必须为真才能使整个条件为真。

$year2 = 2017$previousMonth = 10 (十月)。

现在您将 $model->Year 设置为 2018 和 $model->Month = 1(一月)。 条件中的第一个表达式是2018 >= 2017 这部分是true 但是第二个表达式是1 > 10false 然后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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM