DBIx :: Class :: ResultSet проблемы - PullRequest
       11

DBIx :: Class :: ResultSet проблемы

4 голосов
/ 25 ноября 2010

У меня есть следующий код:

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 Ответ

13 голосов
/ 26 ноября 2010

То, как вы используете условие SQL :: Abstract, приведет к следующему условию:

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 ... таким образом, вы можете проверить, действительно ли он выполняет то, что вы хотите .

...