2010-02-17 32 views
6

J'utilise Symfony 1.4 et Doctrine.Comment "commander par" un sfWidgetFormDoctrineChoice dans le générateur Admin

Disons que j'ai 2 classes: une marque et un produit. Lorsque je crée un nouveau produit dans l'administrateur Admin Generator, je souhaite choisir une marque dans une liste déroulante. Le Générateur Admin fait cela pour moi, en créant automatiquement un sfWidgetFormDoctrineChoice.

Le problème est que les marques sont classées par identifiant. Je voudrais qu'ils soient classés par leur champ "label".

Pour ce faire, je l'ai fait ce qui suit dans ma classe ProductForm:

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

Mais je reçois l'erreur suivante:

Syntax error or access violation: 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 'a' at line 1. Failing Query: "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 l a"

L'ordre par la déclaration est vraiment bizarre. Je ne comprends pas pourquoi il semble couper le nom de l'ordre par déclaration.

Éditer: Apparemment, l'option 'order_by' attend un tableau en tant que deuxième paramètre. Quelles sont les valeurs attendues?

Répondre

18

Je n'ai pas essayé la solution de Benlumley puisqu'il a répondu juste quand j'ai trouvé ma solution. Cela semble plus fastidieux que ce que j'ai fini de faire. J'ai regardé le code source pour comprendre comment tout cela fonctionnait. Il se trouve l'option « order_by » a besoin d'un tableau spécifiant le champ sur lequel on veut commander les résultats et soit « asc » ou « desc »:

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

Il fonctionne comme un charme.

+0

J'ai totalement mal interprété votre question! Mine est de commander la page de liste sur le générateur d'administration par un champ sur une table étrangère - pas ce que vous voulez du tout! – benlumley

2

Vous devriez jeter un oeil ici:

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

Sa base hors d'une ancienne version de symfony, donc suspecter le plugin qu'il lie ne fonctionnera pas. Mais je pense que la méthode devrait toujours être saine - le point crucial est que vous devez ajouter une méthode à l'action pour intercepter et modifier la gestion par défaut du tri par ce champ spécifique:

Pour la doctrine, vous devez définir/remplacer addSortQuery, pour propel, addSortCriteria.

Nous vous recommandons de jeter un coup d'oeil dans le dossier cache pour voir à quoi ressemblent les classes générées automatiquement pour comprendre comment cela fonctionne.

+1

cela m'a aidé de toute façon: P, merci. – grilix