Yii2:基于两种型号的日期自定义验证

时间:2015-03-20 21:10:11

标签: php yii2 customvalidator

我有两个型号 Patient Admission有两列,例如admission_datedischarge_date 另一个模型daily_ward_entry有一个日期字段,只说date两个模型都与ipd_patient_id

相关联

现在我想要的是创建一个或两个验证器,以便我可以在daily_ward_entry 之间限制日期条目 admission_datedischarge_date

我查看了compare validator,但我无法理解,如何将值与另一个具有关系的模型的属性进行比较。

我尝试过以下变化,但总是抛出错误:

变体

[$this->discharge_date, 'compare', 'compareValue' => $this->admission_date, 
'operator' => '>='],

错误 - Unknown Property – yii\base\UnknownPropertyException

变体二

['discharge_date', 'compare', 'compareValue' => 'admission_date', 'operator' => '>='],

错误 - Discharge Date must be greater than or equal to "admission_date".无论日期是低还是高,都会生成此错误

变异三

[strtotime($this->discharge_date), 'compare', 'compareValue' =>
strtotime($this->admission_date), 'operator' => '>='],

错误 - Unknown Property – yii\base\UnknownPropertyException

我需要一些指导和帮助。 感谢。

2 个答案:

答案 0 :(得分:0)

在这种情况下,您必须执行自定义验证。在Custom函数中,您将获得POST中的所有模型数据,因此您可以获取数据并执行验证。

答案 1 :(得分:-1)

您应该可以使用custom validator

来实现验证规则
public function rules()
{
    return [
        ['daily_ward_entry', 'validateDate'],
    ]
}

public function validateDate($attribute, $params) {
    if(!($this->patientAdmission->admission_date <= $this->$attribute && $this->$attribute <= $this->patientAdmission->discharge_date)) {
        $this->addError($attribute, 'The Daily Ward Entry must be between the admission date and the discharge date.');
    }
}

这样的事情应该可以理解,我不完全确定你的关系是如何设置的,所以你可能不得不稍微修改一下。