@fman2

Где размещать код фильтрации в Yii2?

Добрый день.
На данный момент размещаю код поиска по модели в одном из методов главной таблицы, там же подтягиваю связи. Правильно ли это?

Получается что то вроде такого:
<?php
namespace app\models;
class SomeModel extends ActiveRecord 
{
     // стандартные primaryKey, tableName
     //-----

     static function search($value1, $value2)
     {
            // тут какие то проверки значений $value1, $value2. Поиск по другим таблицам этих значений (что-то вроде проверки на существование

            // в конце метода вывод
            return $model->find()->with(['relation1', 'relation2'])->where(['value1' => $value1...])->all()
     }
    
}
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
the_mix
@the_mix
web developer
Конечно в моделях, где же еще.
Если вопрос о том, правильно ли подтягивать сразу связи жадной загрузкой ( ->with(['relation1', 'relation2']) ), при фильтрации ( ->where(['value1' => $value1..]) ), то тут 2 ответа, либо да, либо нет)
Если эти релейшены нужны только для того что бы отфильтровать данные по полю из релейшена, то нет. Лучше использовать для этого join.
Если эти данные из релейшенов вам еще где то понабятся, то да, лучше сразу загрузить их жадно (как вы и сделали), что бы не делать потом N лишних sql-запросов, где N колиество строк выборки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Фильтры это...
Но на сколько я знаю, логику описывать можно в моделях, там же и валидация. Сама же фильтрация, ссылку на которую дал выше, описывается в контроллерах. Только ознакомитесь внимательно. Связи естественно в моделях подтягиваются.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы