Yii2: Пользовательская проверка по датам на основе двух моделей

У меня есть две модели, а именно
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

Мне нужно направление и помощь.
Благодарю.

3

Решение

В этом случае вы должны выполнить пользовательскую проверку. в пользовательской функции вы получите все данные модели в POST, чтобы вы могли получить данные и выполнить проверку.

0

Другие решения

Вы должны быть в состоянии достичь своего правила проверки, используя пользовательский валидатор:

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.');
}
}

Нечто подобное должно работать, я не совсем уверен, как настроены ваши отношения, так что вам, вероятно, придется немного изменить это.

-1