我有以下代码:
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)' },
});
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以这种方式使用它时:
$schema->resultset('Case')->cases_last_fourteen_days($username)
Run Code Online (Sandbox Code Playgroud)
我总是得到零结果,谁能说出我做错了什么?
谢谢!
kix*_*ixx 14
您使用SQL :: Abstract条件的方式将导致以下条件:
WHERE username = ? AND date >= 'DATE_SUB(CURDATE(),INTERVAL 14 DAY)'
Run Code Online (Sandbox Code Playgroud)
当您希望在where子句中使用数据库函数时,您需要使用对标量的引用,如下所示:
date => { '>=' => \'DATE_SUB(CURDATE(),INTERVAL 14 DAY)' },
Run Code Online (Sandbox Code Playgroud)
ProTip:如果你将环境变量设置DBIC_TRACE为1,DBIx :: Class会将它生成的查询打印到STDERR ......这样你就可以检查它是否真的符合你的意愿.