Выборка данных

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 12:16

Не могу понять в чем проблема.
	echo Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('created_at', array('from' => $this->date))->count();
	echo Mage::getModel('sales/quote')->getCollection()->addAttributeToFilter('created_at', array('from' => $this->date))->count();

Первая строка работает отлично, вторая нивкакую. В чем разница?
$this->date формируется средствами Zend, а именно
	$date = new Zend_Date();
	$date = $date->sub('7', Zend_Date::DAY);
	$this->date = $date->toString('YYYY-MM-dd HH:mm:ss');


#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 12:26

Есть ли в базе данных объекты quote?

#3 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 12:29

Есть, их там 11, потому как если убрать фильтр, то все отлично.
	echo Mage::getModel('sales/quote')->getCollection()->count();


#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 12:34

Посмотрите, какой запрос на языке SQL формирует коллекция, выполните его вручную.

#5 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 12:54

Заменил метод фильтрации, вроде работает
echo Mage::getModel('sales/quote')->getCollection()->addFieldToFilter('created_at', array('from' => $this->date))->count();

А что это за объекты quote? Я правильно понимаю что это корзины покупателей?

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 12:55

Да. После оформления заказа объект quote становится объектом order.

#7 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 13:18

Т.е.
echo Mage::getModel('sales/quote')->getCollection()->addFieldToFilter('created_at', array('from' => $this->date))->count();

выдаст количество корзин покупателей, которые были созданы за определенный период, причем у одного покупателя может быть только одна корзина?

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 13:20

1)
Когда quote превращается в order - запись из таблицы quote удаляется.

2)
Для выборки за определённый период времени вам нужно ограничить период времени не только снизу, но и сверху.

#9 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 13:24

Значит создается запись в таблице quote когда покупатель что-то добавляет в корзину. А если затем покупатель все удалил из корзины, запись в таблице остается? И интересно как формируется параметр is_active....

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 13:46

Дело в том, что заблошенные корзины удаляются не сразу, а в пакетном режиме планировщиком задач.
Система удаляет те корзины, у которых is_active = false.

#11 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

30.07.2011 20:50

Странно, оформлено 25 заказов, а
 Mage::getModel('sales/quote')->getCollection()->addFieldToFilter('items_count', array('gt' => 0))->addFieldToFilter('updated_at', array('from' => $this->date))->count();
возврает число 25, как будто после оформления запись из таблицы quote не удаляется.

#12 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

30.07.2011 23:51

Каково значение поля is_active?

#13 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

30.07.2011 23:54

Везде is_active равно 0. Может quote удаляется не мгновенно, а переходит в статус неактивных, и потом удаляется, как вы и писали, в пакетном режиме планировщиком задач?

#14 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

30.07.2011 23:56

Почитайте внимательней сообщение выше.

#15 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

31.07.2011 00:00

Просмотр сообщенияДмитрий Федюк (29.07.2011 13:20) писал:

1)
Когда quote превращается в order - запись из таблицы quote удаляется.

2)
Для выборки за определённый период времени вам нужно ограничить период времени не только снизу, но и сверху.



Просмотр сообщенияДмитрий Федюк (29.07.2011 13:46) писал:

Дело в том, что заблошенные корзины удаляются не сразу, а в пакетном режиме планировщиком задач.
Система удаляет те корзины, у которых is_active = false.


Все же при оформлении заказа quote удаляется, или меняет is_active на false. Практика показывает второе. Это ошибка под влиянием модуля, или все так и должно быть?

#16 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

31.07.2011 00:02

Сначала is_active меняется на false, а затем планировших задач удаляет quote.

Поделиться темой: