5

我有以下代码:

package MyPackage::ResultSet::Case;
use base 'DBIx::Class::ResultSet';

sub cases_last_fourteen_days {
    my ($self, $username) = @_; 

    return $self->search({
                username    => $username,
                date        => { '>=' => 'DATE_SUB(CURDATE(),INTERVAL 14 DAY)' },
    }); 
};

但是当我尝试以这种方式使用它时:

$schema->resultset('Case')->cases_last_fourteen_days($username)

我总是得到零结果,谁能告诉我做错了什么?

谢谢!

4

1 回答 1

14

您使用 SQL::Abstract 条件的方式将导致以下 where 条件:

WHERE username = ? AND date >= 'DATE_SUB(CURDATE(),INTERVAL 14 DAY)'

当您希望在 where 子句中使用数据库函数时,您需要使用对 scalar 的引用,如下所示:

date        => { '>=' => \'DATE_SUB(CURDATE(),INTERVAL 14 DAY)' },

专业提示:如果您将环境变量设置为 1, DBIxDBIC_TRACE ::Class 会将它生成的查询打印到 STDERR ...这样您就可以检查它是否真的如您所愿。

于 2010-11-26T12:29:08.113 回答