我有两个型号
Patient Admission
有两列,例如admission_date
和discharge_date
另一个模型daily_ward_entry
有一个日期字段,只说date
两个模型都与ipd_patient_id
现在我想要的是创建一个或两个验证器,以便我可以在daily_ward_entry
之间限制日期条目 admission_date
和discharge_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
我需要一些指导和帮助。 感谢。
答案 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.');
}
}
这样的事情应该可以理解,我不完全确定你的关系是如何设置的,所以你可能不得不稍微修改一下。