Как "заказать" sfWidgetFormDoctrineChoice в Генераторе Администратора

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

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

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

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

Чтобы сделать это, я сделал следующее в моем 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 ОТ бренда b ЗАКАЗАТЬ по l a"

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

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

2 ответа

Решение

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

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

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

Отлично работает.

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

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

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

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

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

Другие вопросы по тегам