Как я могу отфильтровать Perl DBIx recordset с 2 условиями на том же столбце?

Я намочил ноги в DBIx:: Класс — любовь его до сих пор.

Одна проблема, с которой я сталкиваюсь, состоит в том, что я хочу запросить записи, отфильтровывая записи, которые не находятся в определенном диапазоне дат.

Это взяло меня некоторое время, чтобы узнать, как сделать a <= тип соответствия вместо соответствия равенства:

my $start_criteria = ">= $start_date";
my $end_criteria = "<= $end_date";
my $result   = $schema->resultset('MyTable')->search(
  {
    'status_date' => \$start_criteria,
    'status_date' => \$end_criteria,
  });

Очевидная проблема с этим состоит в том, что, так как фильтры находятся в хеше, я перезаписываю значение для "status_date" и только ищу где status_date <= $end_date. SQL, который выполняется:

SELECT me.* from MyTable me where status_date <= '9999-12-31'

Я искал CPAN, Google и ТАК и не смог выяснить, как применить 2 условия к тому же столбцу. Вся документация я смог найти шоу, как отфильтровать больше чем на 1 столбце, но не 2 условия на том же столбце.

Я уверен, что пропускаю что-то очевидное. Кто-то может здесь указать на это мне?

6
задан Sinan Ünür 11 March 2010 в 20:32
поделиться

1 ответ

IIRC, у вас должна быть возможность передать ссылку на массив с несколькими условиями поиска (каждое в своем собственном хешрефе). Например:

my $result = $schema->resultset('MyTable')->search(
  [ { 'status_date' => \$start_criteria },
    { 'status_date' => \$end_criteria },
  ]
);

Изменить: Ой, нервный ум. Это ИЛИ, в отличие от И.

Похоже, что правильный способ сделать это - предоставить хэш-ссылку для одного status_date :

my $result = $schema->resultset('MyTable')->search(
    { status_date => { '>='  => $start_date,  '<='  => $end_date } } 
);

Этот материал задокументирован в SQL :: Abstract , который использует DBIC под капотом.

5
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

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