Sql-запрос изменился после обновления magento


Недавно я обновил свой Magento с 1.8.0.1 до 1.9.2.4, после этого появился некоторый код, который работает не так, как раньше. В одном из моих пользовательских модулей (приобретенный модуль) был такой фильтр сбора данных -

$weekCollection = Mage::getModel('mymodule/mymodel')->getCollection()
         ->addFieldToFilter('id',16)
         ->addFieldToFilter('week(created_time, 1)',$week);

Это sql-запрос был

SELECT `main_table`.* FROM `table_name` AS `main_table` WHERE (`id` = '16') AND (week(`created_time`, 1) = '13')

Этот запрос отлично работал в более старых версиях

После обновления magento запрос для этого кода будет

SELECT `main_table`.* FROM `table_name` AS `main_table` WHERE (`id` = '16') AND (`week(created_time, 1)` = '13')

Это возвращает ошибку Неизвестный столбец 'неделя(время создания, 1) пункт "в", где'

Какие изменения я должен внести в addFieldToFilter код, чтобы сделать sql-запрос таким же?

Author: Piyush, 2017-03-30

3 answers

Попробуйте приведенный ниже код, который будет работать для вас

$weekCollection = Mage::getModel('mymodule/mymodel')->getCollection()
     ->addFieldToFilter('id',16);

$weekCollection->getSelect()->where("week(created_time, 1) = $week"); 
 2
Author: Murtuza Zabuawala, 2017-03-30 10:38:51

Вы можете использовать:

$weekCollection = Mage::getModel('mymodule/mymodel')->getCollection() ->addFieldToFilter('id',`16) ->getSelect() ->where(new Zend_Db_Expr("week(created_time, 1) = $week"));

 1
Author: Aurélien, 2017-03-30 09:01:45

Обновите свой код:

$_week = week(created_time, 1);
$weekCollection = Mage::getModel('mymodule/mymodel')->getCollection()
             ->addFieldToFilter('id',16)
             ->addFieldToFilter($_week,$week);
 1
Author: St3phan, 2017-03-30 09:02:41