У меня есть две модели, а именно
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
Мне нужно направление и помощь.
Благодарю.
В этом случае вы должны выполнить пользовательскую проверку. в пользовательской функции вы получите все данные модели в 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.');
}
}
Нечто подобное должно работать, я не совсем уверен, как настроены ваши отношения, так что вам, вероятно, придется немного изменить это.