Size: a a a

2019 September 05

RT

Roman Tsurkanu in Yii Framework 3
Alexander Makarov
вопрос: что будет на выходе build?
по идее получает ридер и возвращает ридер, хотя да, хрень получается
источник

AR

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

и далее есть

Filter
  ArrayFilter
  SQLFilter
Получается, что мы имеем кастомные условия на языке дата ридера, типа таких:
$criteria = new AndAll(
   new Compare('test', 42),
   new Expression('substr(name, 1, 3) = 'Bob')
);

или
$criteria = new AndAll(
   new Compare('test', 42),
   new Compare(new Expression('substr(name, 1, 3)'), 'Bob')
);

Которые потом SqlFilter преобразеут sql-строку, которая вставляется в where?
источник

AR

Anton Rybalko in Yii Framework 3
А какой-нибудь ElasticSearchFilter кастомное условие преобразект в сой синтаксис?
источник

AR

Anton Rybalko in Yii Framework 3
SqlDataReader вызывает $this->filter->build(), который скажем возвращает строку для where, и тоже знает как его применить
источник

AM

Alexander Makarov in Yii Framework 3
Антон Ситников
да, limit и offset же применяются
Нет. Они только дёргаются. Применяются они в самом datareader.
источник

AM

Alexander Makarov in Yii Framework 3
Anton Rybalko
Получается, что мы имеем кастомные условия на языке дата ридера, типа таких:
$criteria = new AndAll(
   new Compare('test', 42),
   new Expression('substr(name, 1, 3) = 'Bob')
);

или
$criteria = new AndAll(
   new Compare('test', 42),
   new Compare(new Expression('substr(name, 1, 3)'), 'Bob')
);

Которые потом SqlFilter преобразеут sql-строку, которая вставляется в where?
да
источник

AM

Alexander Makarov in Yii Framework 3
Anton Rybalko
А какой-нибудь ElasticSearchFilter кастомное условие преобразект в сой синтаксис?
да
источник

AM

Alexander Makarov in Yii Framework 3
Anton Rybalko
SqlDataReader вызывает $this->filter->build(), который скажем возвращает строку для where, и тоже знает как его применить
да
источник

AR

Anton Rybalko in Yii Framework 3
Ну норм
источник

RT

Roman Tsurkanu in Yii Framework 3
так в итоге у нас один FIlter и много билдеров(sqlBuilder, arrayBuilder, elasticBuider) или у нас много фильтров(sqlFilter, arrayFilter) которые знают про критерии и как их применить?
источник

АС

Антон Ситников in Yii Framework 3
Roman Tsurkanu
так в итоге у нас один FIlter и много билдеров(sqlBuilder, arrayBuilder, elasticBuider) или у нас много фильтров(sqlFilter, arrayFilter) которые знают про критерии и как их применить?
Из описанного Антоном похоже что у нас тебепь много фильтров)
источник

RT

Roman Tsurkanu in Yii Framework 3
збс
источник

AR

Anton Rybalko in Yii Framework 3
Поскольку DataReader сам знает какой фильтр использовать, получается в  DataReader нужно передавать только Criteria
источник

AR

Anton Rybalko in Yii Framework 3
->withCriteria(new And('a', 'b'))
источник

АС

Антон Ситников in Yii Framework 3
Anton Rybalko
Поскольку DataReader сам знает какой фильтр использовать, получается в  DataReader нужно передавать только Criteria
ну так все задумки пойдут в топку(
источник

RT

Roman Tsurkanu in Yii Framework 3
Антон Ситников
ну так все задумки пойдут в топку(
можно оставить помоему текущий dto, который содержит набор критериев, только назвать его не Filter а FilterData, FilterCriteria
источник

RT

Roman Tsurkanu in Yii Framework 3
но тогда ридеру надо будет еще это дто передать фильтру который будет строить запрос
источник

RT

Roman Tsurkanu in Yii Framework 3
я бы оставил передачу целиком фильтра, как сейчас
источник

RT

Roman Tsurkanu in Yii Framework 3
в теории один ридер может уметь работать с несколькими фильтрами
источник

AR

Anton Rybalko in Yii Framework 3
тогда будет что-то типа?:
$sqlReader->withFilter(new Filter(new SqlFilter(new Criteria()))->withLimit(100)
источник