在 Yii2 中验证多个条件
Validate multiple conditions in Yii2
我在 Leave Employee
上进行了这种验证:
- 如果
startdate
小于 applydate
则验证(完成)。
- 如果
maximumquota
小于 0(完成)则无法请假。
- 如果
status = approved
,maximumquota - 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'];
}
我用来完成这项工作的步骤:
进行 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
然后做一个程序:
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
将此添加到 leavecontroller
:
$id=Yii::$app->user->id;
$query="exec endleave @id=$id";
$command=Yii::$app->db->createCommand($query);
$s = $command->queryAll();
编辑控制器。
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,]);
}
我在 Leave Employee
上进行了这种验证:
- 如果
startdate
小于applydate
则验证(完成)。 - 如果
maximumquota
小于 0(完成)则无法请假。 - 如果
status = approved
,maximumquota - 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'];
}
我用来完成这项工作的步骤:
进行 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
然后做一个程序:
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
将此添加到
leavecontroller
:$id=Yii::$app->user->id; $query="exec endleave @id=$id"; $command=Yii::$app->db->createCommand($query); $s = $command->queryAll();
编辑控制器。
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,]); }