2010-09-03 5 views
1

J'utilise cakephp depuis un moment, mais je n'ai pas encore appris tous les tenants et aboutissants, il me manque peut-être quelque chose de simple. Ou le problème peut résider avec ma structure de base de données. De toute façon, si quelqu'un a une idée de ce que je fais mal, s'il vous plaît partager.Commander des données en utilisant des valeurs stockées dans une autre table

Existe-t-il un moyen de trier les données renvoyées par la recherche de cakephp en utilisant des valeurs stockées dans une autre table?

Je crée des champs de formulaire personnalisés par catégorie. Lorsque je choisis une catégorie particulière à publier, des champs personnalisés sont ajoutés à mon formulaire. J'ai 3 tables: Posts, Fields et Answers. La table Posts stocke les informations statiques de base de la publication, telles que id, category_id, title et description. La table Fields stocke les données de champ personnalisées, telles que category_id, field_label, taille de champ, etc. La table Answers stocke les valeurs entrées pour des champs particuliers, tels que post_id, field_id, value. J'essaie d'afficher les messages pour une catégorie particulière, et créer des en-têtes de tableau html à la volée, en utilisant des champs de sélection, mis par une colonne bascule dans le tableau des champs, et également sélectionner les réponses associées à ce champ particulier et poster.

Je suis capable de sélectionner toutes les données que je veux, et de tout paginer tout va bien, mais ce que je n'arrive pas à comprendre, c'est comment commander les données en utilisant l'une des valeurs de colonnes dynamiques. Par exemple, si j'ai une année, marque et modélise comme 3 champs personnalisés, je voudrais cliquer sur la colonne de l'année pour trier mes résultats par année, et si je clique sur la colonne make, je voudrais trier mes résultats par les valeurs de make, etc.

Je sais comment classer les résultats par un champ particulier à l'intérieur de la table posts, comme id ou title, mais est-il possible de commander en utilisant les champs personnalisés? Est-ce que je mets en place la base de données et/ou quelque chose d'autre faux, et sinon il y a une méthode particulière de cakephp ou une commande sql que je dois utiliser pour trier par les champs personnalisés? Je ne suis pas très versé dans les commandes sql complexes.

Merci.

Répondre

0

Je vous suggère de transmettre le nom du champ et la direction du tri dans l'URL (GET param). Alors, quand vous avez votre lien d'en-tête de table, former afin qu'il lie à une URL comme ceci:

http://somesite.com/pages/index/sort:customfield1/dir:asc

Puis, quand vous êtes saisissant les données de la db dans votre requête find(), inclure les paramètres nommés comme le paramètre d'ordre qui peut être envoyé à trouver.

Vous devez déterminer une colonne et une direction de tri par défaut. Peut-être que cela soit sélectionnable avec un champ booléen dans le schéma - s'il n'y a aucun paramètre envoyé à l'action ci-dessus, tirez le champ de votre autre table qui a la valeur par défaut à vrai dans l'enregistrement. Pour clarifier: lorsqu'un utilisateur visite une action donnée, vous devez d'abord extraire les champs personnalisés de l'autre table. Ensuite, en utilisant ces champs (soit la valeur par défaut mentionnée ci-dessus, soit les paramètres nommés passés dans l'URL) forment la requête pour les données réelles, en utilisant le paramètre order.

Questions connexes