Получить строку запроса коллекции - PullRequest
5 голосов
/ 09 февраля 2012

Я использую следующий код для получения некоторых данных из таблицы.

    $collection = Mage::getModel('bannerslider/bannerslider')->getCollection()
        ->addFieldToFilter('status',1)
        ->addFieldToFilter('is_home',$this->_display)
    ->addOrder('position', 'ASC')
        ;

Просто для любопытства я хочу проверить запрос, который выполняется здесь, и я эхо, используя этот код

$collection->printLogQuery(true);

var_dump((string)$collection->getSelect());

Теперь моя проблема в том, что строка

SELECT `main_table`.* FROM `bannerslider` AS `main_table` WHERE (status = '1') AND (is_home = '0')

не показывает мое последнее условие, addOrder, но коллекция действительно упорядочена по полю позиции, я проверил это.

Чего я не понимаю, так это того, почему условие заказа не отображается в запросе.Спасибо.

Ответы [ 3 ]

13 голосов
/ 09 февраля 2012

Причина, по которой ваш заказ не отображается, заключается в том, что заказы добавляются в запрос во время метода load ().
См. Varien_Data_Collection_Db::load()

public function load($printQuery = false, $logQuery = false)
{
    // ... removed for brevity

    $this->_renderFilters()
         ->_renderOrders()
         ->_renderLimit();

    $this->printLogQuery($printQuery, $logQuery);
    $data = $this->getData();

    // ... removed for brevity
}

Если вы позвоните $collection->load(true)вы бы увидели SQL, содержащий предложение order by.

4 голосов
/ 09 февраля 2012

Работа с коллекцией попробуйте следующие вещи:

$collection->setOrder('position', 'ASC'); // main order setter
$collectioon->getSelect()->order('position asc'); // alternative order setter

$collection->load(); // some times you need to call load() to be sure your collection don't get changes later in some place
echo $collection->getSelect(); // to print query

Надеюсь, это поможет

1 голос
/ 09 февраля 2012

Вы можете попробовать использовать метод addAtributeToSort() следующим образом:

$collection = Mage::getModel('bannerslider/bannerslider')->getCollection()
    ->addFieldToFilter('status',1)
    ->addFieldToFilter('is_home',$this->_display)
    ->addAtributeToSort('position', 'ASC');

Это работает на Magento CE 1.5.1, я надеюсь, что это будет для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...