gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:04:58 24 4
gpt4 key购买 nike

我在 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 },
]
);

编辑:哎呀,神经病。这是一个 OR,而不是一个 AND。

看起来正确的做法是为单个 status_date 提供一个 hashref。 :
my $result = $schema->resultset('MyTable')->search(
{ status_date => { '>=' => $start_date, '<=' => $end_date } }
);

这些东西记录在 SQL::Abstract 中,DBIC 在幕后使用。

关于perl - 如何在同一列上过滤具有 2 个条件的 Perl DBIx 记录集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com