【问题标题】:Order by not working properly CakePHP 2.4按无法正常工作的顺序 CakePHP 2.4
【发布时间】:2014-03-19 13:32:10
【问题描述】:

我的控制器中有一个名为 view 的函数,代码如下:

$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

此处缺少 order by 子句。任何人都可以指出我做错了什么。

谢谢。

【问题讨论】:

  • 一行尝试:'order' => array("DisplayOrder.display_order ASC")
  • 试过但没用..

标签: cakephp cakephp-2.4


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我认为你错过了一些关于如何使用 CakePHP 的内容。

    您似乎没有使用模型可用的 'belongsTo'、'hasMany' ... 选项。它将允许您为您完成所有这些工作。

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

    关于您的问题,一旦您为 User 表建立了合适的模型,您只需要执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      相关资源
      最近更新 更多