Коллекция SQL-запросов в Magento - PullRequest
0 голосов
/ 17 октября 2011

У меня есть этот запрос:

        $collection = $this->getAssociatedProductCollection($product)
            ->addAttributeToSelect('*')
            ->addFilterByRequiredOptions()
            ->setPositionOrder()
            ->addStoreFilter($this->getStoreFilter($product))
            ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)))
->addAttributeToSort('my_attribute', 'DESC');

и я хочу ЗАКАЗАТЬ сопутствующие товары по "my_attribute"

Фрагмент ->addAttributeToSort('my_attribute', 'DESC'); не дает мне хорошего результата, потому что в моем атрибуте хранятся числа в виде текста.

Я создал тестовую базу данных и увидел, что текущий запрос наложил порядок в моей тестовой базе данных:

SELECT * FROM length ORDER BY my_attribute + 0

Мой вопрос таков: как добавить «+ 0» в мой первый запрос к Magento, чтобы сделать правильный заказ:)

[EDIT]

Вот моя полная измененная функция:

public function getAssociatedProducts($product = null)
{
    if (!$this->getProduct($product)->hasData($this->_keyAssociatedProducts)) {
        $associatedProducts = array();

        if (!Mage::app()->getStore()->isAdmin()) {
            $this->setSaleableStatus($product);
        }


        $collection = $this->getAssociatedProductCollection($product)
            ->addAttributeToSelect('*')
            ->addFilterByRequiredOptions()
            ->setPositionOrder()
            ->addStoreFilter($this->getStoreFilter($product))
            ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)))
            ->addAttributeToSort('breite', 'ASC')
            // My Modification 
            ->addAttributeToSort('my_attribute', 'ASC');
            // My Modification 


        foreach ($collection as $item) {
            $associatedProducts[] = $item;
        }

        $this->getProduct($product)->setData($this->_keyAssociatedProducts, $associatedProducts);
    }
    return $this->getProduct($product)->getData($this->_keyAssociatedProducts);
}

[/ EDIT]

Большое спасибо. :)

1 Ответ

1 голос
/ 17 октября 2011

Нет простого способа сделать это, я бы порекомендовал вам точно проверить, что делает ваша коллекция:

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

Это должно вернуть запрос, используемый для получения этой коллекции, тогда вы можетеиметь возможность использовать прямой SQL вместо вашего кода.

Другой вариант - сортировка коллекции с использованием функций сортировки массива PHP, таких как:

$data = $collection->getItems();  //an array of objects-
usort($data,array('my_attribute','sortByMyAttribute'));
return $data;

function sortByMyAttribute(){
   #
   # Do your desired sort here
}

ОК после просмотраобновите код попробуйте:

   $collection = $this->getAssociatedProductCollection($product)
        ->addAttributeToSelect('*')
        ->addFilterByRequiredOptions()
        ->addStoreFilter($this->getStoreFilter($product))
        ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)))
        ->addAttributeToSort('breite', 'ASC')

Я удалил установленную позицию Order, дайте мне знать, как это происходит

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