如何在同一列上过滤具有2个条件的Perl DBIx记录集?

Bri*_*anH 6 perl dbix-class

我在DBIx :: Class中弄湿了- 到目前为止爱它了.

我遇到的一个问题是我想查询记录,过滤掉不在特定日期范围内的记录.

我花了一些时间来找出如何进行<=匹配而不是相等匹配:

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

这个问题的一个明显问题是,由于过滤器是哈希值,我会覆盖"status_date"的值,并且只搜索status_date <= $ end_date的位置.执行的SQL是:

SELECT me.* from MyTable me where status_date <= '9999-12-31'
Run Code Online (Sandbox Code Playgroud)

我搜索过CPAN,Google和SO,但无法弄清楚如何将2个条件应用于同一列.我能够找到的所有文档都显示了如何在同一列上过滤超过1列而不是2个条件.

我确定我错过了一些明显的东西.有人可以在这指出我吗?

fri*_*edo 5

IIRC,您应该能够传递多个搜索条件的数组引用(每个都在自己的hashref中.)例如:

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

编辑:哎呀,nervermind.这是一个OR,而不是AND.

看起来正确的方法是为单个提供hashref status_date:

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

这些东西记录在SQL :: Abstract中,这是DBIC在引擎盖下使用的.