2014-03-19 37 views
0

我在我的控制器中的函数调用视图和代码如下给予:排序不能正常工作CakePHP的2.4

$conditions = array(
          'OR'=>array(
             'User.id'=>$this->Auth->user("id"), 
             'Sharing.user_id' => $this->Auth->user("id"), 
             ) 
         ); 
    $joins  = array(
         array('table' => 'clists_sharings', 
           'alias' => 'Sharing', 
           'type' => 'LEFT', 
           'conditions' => array(
           'Sharing.user_id' => $this->Auth->user("id"), 
           'Sharing.clist_id = Clist.id' 
          ) 
         ), 
         array('table' => 'clists_tags', 
           'alias' => 'Tag', 
           'type' => 'LEFT', 
           'conditions' => array(
           'Tag.clist_id = Clist.id' 
           ) 
         ), 
         array('table' => 'clist_orders', 
           'alias' => 'DisplayOrder', 
           'type' => 'LEFT', 
           'conditions' => array(
           'DisplayOrder.clist_id = Clist.id', 
           'DisplayOrder.user_id' => $this->Auth->user("id") 
           ) 
         ) 
        ); 
    $this->Paginator->settings = array(
             'conditions' => $conditions, 
             'limit' => 15, 
             'joins' => $joins, 
             'recursive'=>1, 
             'order'=>array("DisplayOrder.display_order"=>"ASC"), 
             'group'=>'Clist.id' 
            ); 

    $lists = $this->Paginator->paginate('Clist'); 

    $this->set('lists', $lists); 

我对这个请求的SQL日志:

SELECT `Clist`.`id`, `Clist`.`user_id`, `Clist`.`title`, `Clist`.`list_type`, `Clist`.`archived`, `Clist`.`created`, `Clist`.`modified`, `User`.`id`, `User`.`full_name`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`role_id`, `User`.`is_activated`, `User`.`created`, `User`.`modified`, `User`.`reset`, `User`.`reset_hash` FROM `conduit`.`dll_clists` AS `Clist` LEFT JOIN `conduit`.`dll_clists_sharings` AS `Sharing` ON (`Sharing`.`user_id` = '1' AND `Sharing`.`clist_id` = `Clist`.`id`) LEFT JOIN `conduit`.`dll_clists_tags` AS `Tag` ON (`Tag`.`clist_id` = `Clist`.`id`) LEFT JOIN `conduit`.`dll_clist_orders` AS `DisplayOrder` ON (`DisplayOrder`.`clist_id` = `Clist`.`id` AND `DisplayOrder`.`user_id` = '1') LEFT JOIN `conduit`.`dll_users` AS `User` ON (`Clist`.`user_id` = `User`.`id`) WHERE ((`User`.`id` = 1) OR (`Sharing`.`user_id` = '1')) GROUP BY `Clist`.`id` LIMIT 15 

的此条目中缺少按条款排序。任何人都可以指出我做错了什么。

谢谢。

+0

尝试所有在一行:''order'=> array(“DisplayOrder.display_order ASC”)' – Eagle

+0

试过但不能正常工作.. –

回答

0

尚未测试,但您可能需要在settings数组中的型号名称的键中设置顺序。

$this->Paginator->settings = array(
      'conditions' => $conditions, 
      'limit' => 15, 
      'joins' => $joins, 
      'recursive'=>1, 
      'DisplayOrder' => array(
       'order'=>array("display_order"=>"ASC"),     
      ), 
      'group'=>'Clist.id' 
     ); 
+0

对不起,它没有解决。 –

0

我觉得你错过了关于如何使用CakePHP的东西。

看来你并没有使用'belongsTo','hasMany'...选项可用于模型。它可以让你为你做这一切工作。

点击这里了解更多详情: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

关于您的问题,一旦你做的用户表一个适当的模型,您需要做的仅仅是这样的:

$hasOne = array(
    'DisplayOrder' => array(
     'className' => 'DisplayOrder', 
     'foreignKey' => 'user_id', 
     'order' => 'DisplayOrder.display_order ASC' 
    ),