我在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个条件.
我确定我错过了一些明显的东西.有人可以在这指出我吗?
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在引擎盖下使用的.