【问题标题】:Yii2: Custom Validation on Dates based on two modelsYii2:基于两个模型的日期自定义验证
【发布时间】:2015-03-20 21:10:10
【问题描述】:

我有两个模型,即 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

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

【问题讨论】:

    标签: php yii2 customvalidator


    【解决方案1】:

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

    【讨论】:

    • 您的回答不够详细。你能扩展它来说明你的意思吗?
    【解决方案2】:

    您应该能够使用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.');
        }
    }
    

    这样的东西应该可以工作,我不完全确定你的关系是如何设置的,所以你可能需要稍微修改一下。

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2011-10-24
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多