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句でデータベース関数を使用する場合は、次のようにスカラーへの参照を使用する必要があります。

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

ProTip:環境変数DBIC_TRACEを1に設定すると、DBIx :: Classは生成したクエリをSTDERRに出力します...このようにして、本当に希望どおりに動作するかどうかを確認できます。

于 2010-11-26T12:29:08.113 に答える