>我有两个模型,即 Patient Admission
具有两列,例如admission_date
和discharge_date
另一个模型daily_ward_entry
有一个日期字段,说两个模型date
相关ipd_patient_id
现在我想要的是创建一个或两个验证器,以便我可以限制admission_date
和discharge_date
之间的日期条目daily_ward_entry
我看了一下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
我需要一些指导和帮助。谢谢。
在这种情况下,您必须执行自定义验证。 在自定义函数中,您将在 POST 中获取所有模型数据,因此您可以获取数据并执行验证。
您应该能够使用自定义验证程序实现验证规则:
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.');
}
}
可以想象这样的事情应该有效,我不完全确定你们的关系是如何建立的,所以你可能不得不稍微修改一下。