Как "заказать" 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.
Рекомендуем взглянуть в папку кеша, чтобы увидеть, как выглядят автоматически сгенерированные классы, чтобы понять, как это работает.