Question

Je souhaite sélectionner des enregistrements de 1 mois ou plus récents.

La requête est la suivante: SELECT * FROM foobar WHERE created_at > DATE_SUB (curdate (), INTERVAL 1 MOIS)

En utilisant Propel dans Symfony, je fais:

  

$ c = new Critères
  $ c-> add (FoobarPeer :: CREATED_AT, "DATE_SUB (curdate (), INTERVAL 1 MOIS)", Critères :: GREATER_THAN);

Ce que génère Propel est le suivant: SELECT * FROM foobar WHERE created_at > 'DATE_SUB (curdate (), INTERVAL 1 MOIS)' - autrement dit, il met la fonction MySQL entre guillemets simples, ce qui en fait une chaîne (sans signification) et je n'ai aucun enregistrement.

Ce que j'ai fait pour l'instant est:

  

$ c-> add (FoobarPeer :: CREATED_AT, "created_at > DATE_SUB (curdate (), INTERVAL 1 MOIS)", Critères :: CUSTOM);

Mais je ne veux pas utiliser de solution de rechange personnalisée à moins que je ne sois obligé de le faire. Des astuces autres que l'utilisation de Criteria :: CUSTOM?

Était-ce utile?

La solution

Je pense qu'il n'y a pas d'autre choix que d'utiliser Criteria :: CUSTOM ou de faire une requête SQL personnalisée comme celle-ci:

$con = Propel::getConnection(DATABASE_NAME);

$sql = "SELECT foobar.* FROM foobar WHERE created_at > DATE_SUB(curdate(), INTERVAL 1 MONTH)";  
$stmt = $con->prepare($sql);
$stmt->execute();

$books = FoobarPeer::populateObjects($stmt);

En effet, Propel essaie d'être indépendant du système de gestion de base de données (SGBD) pour faciliter la migration en effectuant un simple changement de valeur de configuration. Par conséquent, aucune fonction spécifique au SGBD n'est intégrée.

Autres conseils

remplacez simplement le code de date mysql que vous utilisez ici par une variable php précalculée qui contient déjà cette date.

c'est-à-dire

$monthAgo = '2008-10-03';
$c = new Criteria
$c->add(FoobarPeer::CREATED_AT, $monthAgo, Criteria::GREATER_THAN); 

Évidemment, vous devriez calculer dynamiquement la date en php, plutôt que de la coder en dur, mais vous obtenez la photo.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top