2010-08-10 20 views
2

Je voudrais retourner les clients de Magento qui ont été créés la veille ou qui ont été mis à jour la veille. J'ai essayé de jouer avec addFieldToFilter, sans aucun succès.Requête complexe impliquant des dates

J'ai également essayé de manipuler Zend_Db_Select, sans succès.

Alors maintenant je suis coincé!

Voici quelques-unes de mes essais:

$customer = Mage::getModel('customer/customer'); 
$customers = $customer 
    ->getCollection() 
    ->getSelect() 
    ->where("updated_at >= ? AND updated_at <= ?",$this->getFrom(), $this->getTo()) 
    ->orWhere("e.created_at >= ? AND e.created_at <= ?", $this->getFrom(), $this->getTo()); 

Ou

->addFieldToFilter(
    array(
     array('attribute'=>'updated_at', 'gteq'=>$this->getFrom()), 
     array('attribute'=>'created_at', 'gteq'=>$this->getFrom()) 
    ), 
    '', 
    'left' 
); 

Merci

+0

À quoi ressemble la requête SQL générée? (var_dump ((string) $ customer-> getSelect());) –

Répondre

2

Je déconseille manipuler directement la sélection à moins qu'il ne soit absolument nécessaire et vous savez exactement ce qui se passe dans les coulisses de votre version de Magento.

La syntaxe suivante doit gérer les parties difficiles pour vous

$c = Mage::getModel('customer/customer') 
->getCollection() 
->addAttributeToFilter(array(    
    array('attribute'=>'updated_at','from'=>'2010-05-12','to'=>'2010-05-30'), 
    array('attribute'=>'created_at','from'=>'2010-05-12','to'=>'2010-05-13') 
)); 

var_dump((string) $c->getSelect()); 
var_dump(count($c)); 

tout ce que vous aurez besoin de faire est de déposer la date va vous voulez.

+0

Techniquement, c'est exactement ce que j'ai demandé, merci! Mais l'astuce de silvo est également utile: je peux ignorer created_at, parce que update_at est automatiquement défini quand un utilisateur est créé. – frinux

2

Il suffit d'utiliser updated_at comme attribut de filtre, car il est réglé sur courant datetime lorsqu'un utilisateur est créé. Donc, en filtrant avec ce champ, vous obtiendrez à la fois de nouveaux utilisateurs et ceux qui ne sont pas nouveaux mais qui ont été mis à jour dans la période donnée. Voici le code pour rechercher des utilisateurs mises à jour ou créés au cours des 24 dernières heures:

$customers = Mage::getModel('customer/customer')->getCollection(); 
$customers->addAttributeToFilter('updated_at', array('gt' => date("Y-m-d H:i:s", time()-60*60*24))); 

foreach($customers as $customer) { 
    //do sth 
} 
0

Merci à Alan et Silvo, voici ce que je l'ai écrit:

->addAttributeToFilter(array(    
    array('attribute'=>'updated_at','from'=>$this->getFrom(),'to'=>$this->getTo()) 
)); 

Les deux réponses étaient UTILE. Je vous remercie!