Question

J'utilise Symfony 1.4 et Doctrine.

Disons que j'ai 2 classes:. Une marque et un produit

Quand je crée un nouveau produit dans l'admin basé Admin Generator, je voudrais choisir une marque dans une liste déroulante. Le générateur Admin fait que pour moi, ce qui crée automatiquement un sfWidgetFormDoctrineChoice.

Le problème est que les marques sont commandés par id. Je les aime à commander 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:

  

Syntaxe violation d'erreur ou d'accès: 1064   Vous avez une erreur dans votre syntaxe SQL;   vérifier le manuel qui correspond à   votre version du serveur MySQL pour la   droit d'utiliser la syntaxe près de « a » à la ligne   1. A défaut de requête: « 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 DE   marque 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 la déclaration.

Modifier Apparemment, l'option 'order_by' attend un tableau en tant que second paramètre. Quelles sont les valeurs-t-il attendre?

Était-ce utile?

La solution

Je n'ai pas essayé la solution de benlumley depuis qu'il a bien répondu quand je trouvé ma solution. Il semble plus pénible que ce que je fini par faire.

Je pris un coup d'oeil au 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.

Autres conseils

Vous devriez jeter un coup d'oeil ici:

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

Son large base d'une ancienne version de symfony, donc suspecter le plugin qu'il lie ne fonctionnera pas. Mais je pense que la méthode doit encore être son - point crucial de c'est que vous devez ajouter la méthode à l'action pour intercepter et modifier le traitement par défaut de tri par ce champ spécifique:

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

vous recommande de jeter un coup d'œil dans le dossier de cache pour voir ce que les classes générées automatiquement ressemblent à obtenir le blocage de la façon dont cela fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top