在 Yii2 中验证多个条件

Validate multiple conditions in Yii2

我在 Leave Employee 上进行了这种验证:

  1. 如果 startdate 小于 applydate 则验证(完成)。
  2. 如果 maximumquota 小于 0(完成)则无法请假。
  3. 如果status = approvedmaximumquota - daysleave(完成)。

我想在输入的 startdate 存在并获得批准时添加另一个验证。 startdate = startdate + daysleave,表格 status=rejected

我已经做了这样的算法:

if(startdate='startdate' between startdate(Y-m-(d+'daysleave')->where('status'=='approved')
{
    $_post = 'status'=rejected,
        'applydate=date('Y-m-d'),
        'startdate';
    )
} else {

}

这是我创建的控制器:

if ($model->load(Yii::$app->request->post())){
    if($model->daysleaveleft(Yii::$app->user->id,date('Y',strtotime($model->startdate)))>0)
    {
        //Edited
        if($model->startdate < max($s))
        {
            $model->status='2';
        }//
        if($model->startdate < $model->applydate)
        {
            echo "Error !";
        }
        else
        {
            $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }
    else
    {
        $model->status='2';
    }
} 
else
{
    return $this->render('create', ['model' => $model,]);
}

还有我的休假模特:

public function DaysLeaveLeft($id, $year) {
    $models = Leave::find()->select(['daysleave'=>'sum(daysleave)'])->where(['status'=>'approved','EmpId' => $id,'year(startdate)'=>$year])->One();
    $Setting = Setting::find()->where(['Var'=>'MaxLeave'])->One();
    return $Setting->Val - $models['daysleave'];  
}

我用来完成这项工作的步骤:

  1. 进行 SQL 查询以获取休假天数,例如,如果 startdate = 03-08-2016,则 enddate = startdate + Leave Days

    ALTER FUNCTION enddays(@Id bigint)
    RETURNS VARCHAR(10)
    AS BEGIN
    DECLARE @st DATE, @long INT,@Var VARCHAR(10)='0',@cekId INT =0
    SELECT @cekId=id,@st=startdate,@long=leavedays FROM leave WHERE id=@Id  
    IF @cekId > 0 BEGIN
    SELECT @long +=COUNT(dt)
    FROM calendar WHERE cast(dt as date) BETWEEN cast(@st as dt) and  cast(DATEADD(day,@long,@st) as date)
    set @Var = CAST(CAST(DATEADD(DAY,@long,@st) AS DATE) AS VARCHAR(10))
    END
    RETURN @Var
    END
    
  2. 然后做一个程序:

    ALTER procedure endleave
    @id bigint
    as
    BEGIN
    SELECT dbo.endays(l.id) from leave l
    WHERE GETDATE() < CAST(dbo.enddays(l.id) as date) 
    and EmpId=@id
    and status= 1
    END
    
  3. 将此添加到 leavecontroller:

    $id=Yii::$app->user->id;
    $query="exec endleave @id=$id";
    $command=Yii::$app->db->createCommand($query);
    $s = $command->queryAll();
    
  4. 编辑控制器。

    if ($model->load(Yii::$app->request->post())) {
        if($model->daysleaveleft(Yii::$app->user->id,date('Y',strtotime($model->startdate)))>0) {
            //Edited
            if($model->startdate < max($s)) {
                $model->status = '2';
            }
            if($model->startdate < $model->applydate) {
                echo "Error !";
            } else {
                $model->save();
                return $this->redirect(['view', 'id' => $model->id]);
            }
        } else {
            $model->status = '2';
        }
    }  else {
        return $this->render('create', ['model' => $model,]);
    }