Как сделать заказ с помощью sfWidgetFormDoctrineChoice в генераторе администратора

Я использую Symfony 1.4 и Doctrine.

Скажем, у меня есть 2 класса: бренд и продукт.

Когда я создаю новый продукт в администраторе на основе Admin Generator, я хочу выбрать бренд из раскрывающегося списка. Генератор администрирования делает это за меня, автоматически создавая файл sfWidgetFormDoctrineChoice.

Проблема в том, что бренды упорядочены по id. Я бы хотел, чтобы они были упорядочены по полю «метка».

Для этого я сделал следующее в своем классе ProductForm:

$this->widgetSchema['brand_id']->addOption('order_by','label');

Но я получаю следующую ошибку:

Синтаксическая ошибка или нарушение доступа: 1064 Ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «a» в строке 1. Неудачный запрос: «SELECT b.id AS b__id, b.external_id AS b__external_id, b.label AS b__label, b.created_at AS b__created_at, b.updated_at AS b__updated_at FROM brand b ORDER BY la"

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

Редактировать: очевидно, что параметр "order_by" ожидает массив в качестве второго параметра. Какие значения он ожидает?


person Guillaume Flandre    schedule 17.02.2010    source источник


Ответы (2)


Я не пробовал решение Бенламли, так как он ответил правильно, когда я нашел свое решение. Это кажется более утомительным, чем то, что я закончил делать.

Я взглянул на исходный код, чтобы понять, как все это работает. Оказывается, для опции «order_by» требуется массив, указывающий поле, в котором нужно упорядочить результаты, и либо «asc», либо «desc»:

$this->widgetSchema['product_id']->addOption('order_by',array('label','asc'));

Работает как часы.

person Guillaume Flandre    schedule 17.02.2010
comment
Я совершенно неправильно понял ваш вопрос! Мое - упорядочить страницу списка в генераторе администратора по полю в чужой таблице - совсем не то, что вы хотите! - person benlumley; 18.02.2010

Вы должны посмотреть здесь:

http://trac.symfony-project.org/wiki/HowtoSortAdminGeneratorListByForeignTableName

Он основан на старой версии symfony, поэтому подозреваю, что плагин, на который он ссылается, не будет работать. Но я думаю, что метод все равно должен быть разумным - суть в том, что вы должны добавить метод к действию, чтобы перехватить и изменить обработку сортировки по умолчанию по этому конкретному полю:

Для доктрины вам необходимо определить/переопределить addSortQuery, для продвижения — addSortCriteria.

Рекомендуем вам заглянуть в папку кеша, чтобы увидеть, как выглядят автоматически сгенерированные классы, чтобы понять, как это работает.

person benlumley    schedule 17.02.2010