2014-09-16 5 views
0

J'ai une table avec un champ 'title', j'essaye d'obtenir toutes les lignes dans cette table, et les ordonne par le titre ASC. Les quatre dossiers que je teste avec ont les titres:Le paquet ORM de FuelPHP ne commande pas correctement les articles

Un autre test

ma nouvelle page

NOUVEAU

aaa

C'est aussi l'ordre les lignes sont renvoyées qui est incorrect . 'aaa' devrait être en haut de la liste. Je suppose que le problème est avec les caractères majuscules et minuscules.

Je veux commander par LOWER (titre) plutôt que par titre, mais j'ai des problèmes pour que cela fonctionne dans FuelPHP.

Le code que je utilise pour sélectionner les enregistrements est:

$pages = Model_pages::find('all', array(
    'order_by' => array('title' => 'asc') 
)); 

Comment puis-je faire le code ci-dessus les éléments de commande quel que soit leur « cas »?

EDIT:

@Uru, merci pour les commentaires :) J'ai essayé le code suivant, toutes les variations entraînent des erreurs SQL ou PHP:

$pages = Model_pages::find('all', array(
    'order_by' => \DB::expr('LOWER(title) ASC') 
)); 

$pages = Model_pages::find('all', array(
    'order_by' => \DB::expr('LOWER(title)') 
)); 

$pages = Model_pages::find('all', array(
    'order_by' => \DB::expr('LOWER(title) ASC') 
)); 

$pages = Model_pages::find('all', array(
    'order_by' => array(\DB::expr('LOWER(title)')) 
)); 

$pages = Model_pages::find('all', array(
    'order_by' => array(\DB::expr('LOWER(title) ASC')) 
)); 

$pages = Model_pages::find('all', array(
    'order_by' => array(\DB::expr('LOWER(title)') => 'ASC') 
)); 

Répondre

0

Vous devriez pouvoir utiliser DB::expr('LOWER(title)') à évitez les expressions et utilisez-les au lieu de 'title'.

Si cela ne fonctionne pas et qu'il n'y a rien dans le documentation, cette fonctionnalité n'est actuellement pas prise en charge.

0

Le problème était avec la collation de base de données dans MySQL, en le modifiant en utf8_general_ci résolu le problème. Merci à Harro sur les forums FuelPHP pour répondre à celui-ci:

Utilisez-vous MySQL? Et si oui, quelle séquence d'assemblage utilisez-vous pour votre table?

MySQL comme séquence de classement avec "ci" à la fin (comme utf8_general_ci), qui sont "insensible à la casse". Ce qui signifie "aaa" et "AAA" sont triés également.

Si vous voulez savoir ce que SQL est exécuté exactement, réglez le « profilage » pour vrai dans votre config.php, et le mettre à true dans votre base de données définition , en /db.php.

Vous obtiendrez un petit profileur noir dans le coin en bas à droite de votre page , et si vous cliquez dessus, le profileur ouvrira, et il montrera que vous toutes les requêtes SQL exécutées.

Il n'y a rien de mal avec votre code ORM autant que je peux voir, mais je n'utilisez jamais la notation de tableau.J'aurais utilisé (qui devrait générer le même SQL):

$ pages = Model_pages :: query() -> order_by ('title', 'asc') -> get();

Le fil complet est disponible ici pour toute personne utilisant le même problème:

http://fuelphp.com/forums/discussion/13226/fuelphp039s-orm-isn039t-ordering-items-correctly

Questions connexes