Доброй ночи всем!
Очень давно задавал вопрос на похожую тему:
Active Query как применить функцию из модели?, но так и не решил этот момент для себя. Вроде бы ответы правильные, но задал вопрос не правильно, поэтому не получил должного ответа. Теперь задаю его снова.
Запрос: $certifications = Certification::find()
->joinWith(['user', 'profile'])
->andWhere([User::tableName().'.status' => User::STATUS_ACTIVE])
->andWhere('CONCAT_WS(" ", '.Profile::tableName().'.last_name, '.Profile::tableName().'.name, '.Profile::tableName().'.middle_name) LIKE :search')
->params([':search' => '%' . $search . '%'])
->orderBy([Profile::tableName().'.last_name' => 'SORT_ASC', Profile::tableName().'.name' => 'SORT_ASC'])
->limit(8)
->isValid() //?? метод из модели CertificationQuery
->all();
Модель Active Query (CertificationQuery)public function isValid()
{
$this->andWhere(['<=', 'date_from', 'здесь рассчитываемая из модели обратная дата (getReverseEndDate())']);
}
Метод и модели Certification, который нужно применить/**
* Получаем обратную дату окончания действия категории
* @return string
*/
public function getReverseEndDate(): string
{
$date = date_create($this->date_from); //подготавливаем дату для рассчёта срока
$date = date_modify($date, '-'.$this->category->duration_months.'month'); //Вычитаем дату от текущей
return Yii::$app->formatter->asTimestamp($date);
}
Вопрос:- Как я могу применить метод
getReverseEndDate()
из модели в Active Query?
- Поправьте, если я не правильно рассчитываю дату. Мне нужно прибавлять месяцы.
Обращаю внимание, что метод находится в модели, с помощью который делаем запрос. Благодарю!