2011-02-16 3 views
2

HI, pourquoi ne pas travailler fonction "ordre"?cakephp utilisant paginate et commande

$this->paginate = array(
       'limit' => 5, 
       'order' => array(
        'User.name' => 'desc' 
       ), 
       'fields' => array('Post.id', 'Post.title', 'User.name AS aut_name'),       
       'joins' => array(
        array(
         'table' =>'users', 
         'alias' =>'User', 
         'type' =>'LEFT', 
         'conditions' => array(
          'Post.user_id = User.user_id' 
         ) 
        ) 
       ) 
     ); 

     $posts = $this->paginate(); 
     $this->set(compact('posts')); 

Structure DB:

posts: 
id, title,body, created, updated, user_id 

users: 
user_id, name 

Répondre

1

Vous cherchez rapidement votre code ... Est-ce champ user_id existe dans le tableau de l'utilisateur?

'conditions' => array(
    'Post.user_id = User.id' 
) 
+0

dans ces conditions je connecter après avec l'auteur. Je reçois toutes les dates correctement, mais les données ne sont pas triées par condition. – user319854

1

Parce que vous spécifiez User.name As aut_name dans votre fields, vous ne pourrez pas commander par User.name à moins que vous avez également User.name dans votre liste fields. Vous pouvez également utiliser:

'order' => array(
    'aut_name' => 'desc' 
), 

NOTE: Ceci est pour la requête initiale que, pour trier par aut_name de la vue que vous aurez besoin d'utiliser un champ virtuel dans le modèle de l'utilisateur.

De même, comme l'a dit @Min, vos conditions sont-elles correctes?

+0

"sauf si vous avez également User.name dans votre liste de champs" - quelle liste? Je chage à "'aut_name' => 'desc'" et ajoute sort ('Author', 'aut_name'); ?> mais ne trie aucun travail. Pourquoi? Merci – user319854

+0

L'utilisation de $ paginator-> sort dans la vue est un problème totalement différent, si vous avez besoin de faire cela, alors vous devez utiliser un champ virtuel qui vous donne le nom-aut dans chaque requête de l'utilisateur. – ianmjones