2010-11-25 16 views
4

J'ai le code suivant:DBIx :: Class :: problèmes ResultSet

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)' }, 
    }); 
}; 

Mais lorsque je tente de l'utiliser de cette façon:

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

Je reçois toujours aucun résultat, pouvez quelqu'un dit ce que je fais mal?

Merci!

Répondre

13

La façon dont vous utilisez la condition SQL :: Résumé entraînerait cette condition where:

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

Lorsque vous souhaitez utiliser les fonctions de base de données dans une clause where vous devez utiliser a reference to a scalar, comme ceci:

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

ProTip: si vous définissez la variable d'environnement DBIC_TRACE-1, DBIx :: Class imprimera les requêtes qu'il génère à STDERR ... cette façon, vous pouvez vérifier si elle fait vraiment ce que vous wi sh.

+0

Merci! Travaillé parfait! :) –

+0

Pour le resultset, il est possible d'ajouter '-> as_query' qui retournera la requête résultante –