DBIx :: Class :: ResultSet问题

时间:2010-11-25 19:39:23

标签: perl dbix-class

我有以下代码:

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)

我总是得到零结果,任何人都能说出我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:13)

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

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

如果您希望在where子句中使用数据库函数,则需要使用a reference to a scalar,如下所示:

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

ProTip :如果将环境变量DBIC_TRACE设置为1,DBIx :: Class会将它生成的查询打印到STDERR ...这样你可以检查它是否确实你想要什么。