[英]How can I filter a Perl DBIx recordset with 2 conditions on the same column?
我在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,
});
這個問題的一個明顯問題是,由於過濾器是哈希值,我會覆蓋“status_date”的值,並且只搜索status_date <= $ end_date的位置。 執行的SQL是:
SELECT me.* from MyTable me where status_date <= '9999-12-31'
我搜索過CPAN,Google和SO,但無法弄清楚如何將2個條件應用於同一列。 我能夠找到的所有文檔都顯示了如何在同一列上過濾超過1列而不是2個條件。
我確定我錯過了一些明顯的東西。 有人可以在這指出我嗎?
IIRC,您應該能夠傳遞多個搜索條件的數組引用(每個都在自己的hashref中。)例如:
my $result = $schema->resultset('MyTable')->search(
[ { 'status_date' => \$start_criteria },
{ 'status_date' => \$end_criteria },
]
);
編輯:哎呀,nervermind。 這是一個OR,而不是AND。
看起來正確的做法是為單個status_date
提供hashref:
my $result = $schema->resultset('MyTable')->search(
{ status_date => { '>=' => $start_date, '<=' => $end_date } }
);
這些東西記錄在SQL :: Abstract中 ,這是DBIC在引擎蓋下使用的。
在SQL和DBIx :: Class中有BETWEEN
支持:
my $result = $schema->resultset('MyTable')
->search({status_date => {between => [$start_date,$end_date]}});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.