Сложный запрос, подразумевающий даты - PullRequest
2 голосов
/ 10 августа 2010

Я хотел бы вернуть клиентов из Magento, которые были созданы за день до этого, ИЛИ кто был обновлен накануне.Я пытался поиграть с addFieldToFilter, но безуспешно.

Я также пытался манипулировать Zend_Db_Select, безуспешно.

Так что я застрял!

Вот некоторые измои попытки:

$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());

Или

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

Я бы рекомендовал против прямого манипулирования с выбором, если это не является абсолютно необходимым, и вы точно знаете, что происходит за кулисами в вашей версии Magento.

Следующий синтаксис должен обрабатывать сложные части для вас

$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));

все, что вам нужно сделать, это ввести желаемые диапазоны дат.

2 голосов
/ 10 августа 2010

Достаточно использовать updated_at в качестве атрибута фильтра, потому что он установлен на текущую дату и время при создании пользователя.Таким образом, отфильтровав это поле, вы получите как новых пользователей, так и тех, которые не являются новыми, но были обновлены за указанный период.Вот код для поиска пользователей, обновленных или созданных за последние 24 часа:

$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 голосов
/ 11 августа 2010

Спасибо Алану и Сильво, вот что я написал:

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

Оба ответа были полезны.Спасибо!

...