Size: a a a

2019 September 05

RT

Roman Tsurkanu in Yii Framework 3
хотя тоже так себе решение
источник

АС

Антон Ситников in Yii Framework 3
Roman Tsurkanu
как вариант использовать все таки Filter не как dto, а возложить на него обязанность билдинга этих самых критериев в момент вызова read
тогда теляется другая задумка, что фильтр финальная сущьность
источник

АС

Антон Ситников in Yii Framework 3
для использования в гридах и апи
источник

RT

Roman Tsurkanu in Yii Framework 3
ну я за то чтобы он и был расширяемым
источник

RT

Roman Tsurkanu in Yii Framework 3
Антон Ситников
для использования в гридах и апи
почему для использования в гридах он должен быть финальным?
источник

AM

Alexander Makarov in Yii Framework 3
final можно жертвовать
источник

AM

Alexander Makarov in Yii Framework 3
я верно понял?
источник

АС

Антон Ситников in Yii Framework 3
Roman Tsurkanu
ну я за то чтобы он и был расширяемым
учитывая что что он на вход получает array, ты так и не выдал примера зачем это может быть нужно
источник

AM

Alexander Makarov in Yii Framework 3
FilterInterface {
  public function build();
}

и далее есть

Filter
  ArrayFilter
  SQLFilter
источник

AM

Alexander Makarov in Yii Framework 3
и так далее
источник

AM

Alexander Makarov in Yii Framework 3
?
источник

AM

Alexander Makarov in Yii Framework 3
вопрос: что будет на выходе build?
источник

AM

Alexander Makarov in Yii Framework 3
Roman Tsurkanu
public function read(): iterable
   {
       $data = $this->data;

       if ($this->filter !== null) {
           $data = $this->filter->build($this->data);
       }
       ...
   }
И нет, вот так не выйдет. Контрольная проверка:

SQL-табличка на 5 млн. записей.
источник

AM

Alexander Makarov in Yii Framework 3
То есть главный принцип, который рушить ну никак нельзя: сначала формируем критерий, потом его применяем к запросу. Это касается и сортировки, и фильтрации и limit и offset.
источник

АС

Антон Ситников in Yii Framework 3
Alexander Makarov
То есть главный принцип, который рушить ну никак нельзя: сначала формируем критерий, потом его применяем к запросу. Это касается и сортировки, и фильтрации и limit и offset.
ну чисто теоретически с фильтрами можно поступить как с пагинатором, хотя и мне не особо нравится. чтоб у него был метод read который оборачивает dataReader
источник

AM

Alexander Makarov in Yii Framework 3
нельзя
источник

AM

Alexander Makarov in Yii Framework 3
разве тогда получится применить фильтр к самому запросу, а не постфактум к 5 млн. записей?
источник

RT

Roman Tsurkanu in Yii Framework 3
Антон Ситников
учитывая что что он на вход получает array, ты так и не выдал примера зачем это может быть нужно
я же вроде писал, что это нужно просто для того чтобы оставить пользователю возможность его заменить

типа:

final class UserFilter implements FilterInterface
{
   private $user;

   public function __construct(User $user)
   {
       $this->user;
   }

   public function getCriteria(): array
   {
       return [
           'user_id' => $this->user->id,
       ];
   }
}


$dataReader->withFilter(new UserFilter($user));
источник

АС

Антон Ситников in Yii Framework 3
Alexander Makarov
разве тогда получится применить фильтр к самому запросу, а не постфактум к 5 млн. записей?
да, limit и offset же применяются
источник

АС

Антон Ситников in Yii Framework 3
Alexander Makarov
разве тогда получится применить фильтр к самому запросу, а не постфактум к 5 млн. записей?
хотя всетаки согласен что с реализацией будет хуже чем в идее с queryBilder
источник