Как "заказать" sfWidgetFormDoctrineChoice в Генераторе Администратора - PullRequest
6 голосов
/ 17 февраля 2010

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

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

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

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

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

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

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

Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует ваша версия сервера MySQL для правильный синтаксис для использования рядом с «а» в строке 1. Неудачный запрос: "ВЫБЕРИТЕ 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 ОТ Марка B ЗАКАЗАТЬ Л А "

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

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

Ответы [ 2 ]

18 голосов
/ 17 февраля 2010

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

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

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

Работает как шарм.

2 голосов
/ 17 февраля 2010

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

http://trac.symfony -project.org / вики / HowtoSortAdminGeneratorListByForeignTableName

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

Для доктрины вам нужно определить / переопределить addSortQuery, для propel - addSortCriteria.

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

...