Magento: фильтрация getCollection не работает - PullRequest
0 голосов
/ 17 февраля 2011

Мой код getCollection предоставляет неправильную строку запроса (я думаю).

У меня есть таблица с именем banner, из которой я могу загрузить все записи из достаточно простого.Когда я пытаюсь отфильтровать его, я получаю ошибки.

Вот код:

$banner = Mage::getModel('banner/banner')->getCollection()->addFieldToFilter('group', array('eq'=>'search_group'));

Страница падает, и я получаю эту ошибку:

1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'search_group')' at line 1";i:1;s

Как вы можете видеть, похоже, что код портит кавычки после группы.

'group = 'search_group')'

Может кто-нибудь посоветовать, как это исправить?

Спасибо,

Билли

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

group - ключевое слово SQL. Если group также является именем атрибута, вам нужно как-то избежать его. Попробуйте использовать обратные пометки (обычно неиспользуемый ключ ниже Esc ).

$banner = Mage::getModel('banner/banner')
    ->getCollection()
    ->addFieldToFilter('`group`', 'search_group');
3 голосов
/ 17 февраля 2011

Вы неправильно интерпретируете текст ошибки.

 to use near 'group = 'search_group')' 

Внешние кавычки - это сообщения об ошибках, способ блокировать что-то как код.Это, вероятно, было бы яснее

 to use near [group = 'search_group')]

Всегда лучше взглянуть на выбор, который использует ваша коллекция (при условии, что здесь не-eav коллекция, учитывая псевдоним класса стиля Module Creator), и попытаться запустить непосредственноваш клиент MySQL (PHPMyAdmin, приложение командной строки, анализатор запросов, Sequel Pro и т. д.)

header('Content-Type: text/plain');
echo (string) $widget->getSelect();
echo "\n";
var_dump ( (string) $widget->getSelect());
Mage::Log((string) $widget->getSelect());
exit;

Просмотр всего запроса в контексте обычно облегчает обнаружение ошибки.

2 голосов
/ 18 февраля 2011

Один из способов будет: -

Напишите следующую функцию в вашем классе коллекции: -

public function setGroupBy($group)
{
    $this->getSelect()->group($group);
    return $this;
}

Тогда вы можете использовать ее следующим образом: -

$banner = Mage::getModel('banner/banner')->getCollection()->setGroupBy('search_group');

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

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