【问题标题】:CakePHP this->paginate not using order fieldCakePHP this-> 分页不使用订单字段
【发布时间】:2012-02-23 05:31:20
【问题描述】:

无论我做什么,我都无法让它遵守我指定的顺序。

$this->paginate = array(
    'Car' => array(
        'limit' => 6,
        'order' => array(
            'Car.year' => 'desc'
        ),
        'table' => 'cars'
    )
);

生成的 SQL:

SELECT `Car`.`id`, ... `Car`.`year`,... FROM `cars` AS `Car` WHERE 1 = 1 LIMIT 6

【问题讨论】:

  • 我尝试使用var $paginate 在控制器顶部指定它,并将它放在'Car' => 数组之外。无论我做什么,我都无法订购。其他型号对我来说很好订购:S 请帮助!
  • 你为什么要定义表格? IMO 不必要的。还尝试展平数组(没有带有子数组的 Car,只有“限制”、“订单”……)
  • 谢谢马克,老实说,我只是在尝试我能想到的一切。把这些东西拿出来也不能解决问题。

标签: php mysql cakephp pagination


【解决方案1】:

如果您只有一项,则不需要/不应该使用数组:

//one thing
var $order = "Model.field DESC";

//multiple things
var $order = array("Model.field" => "asc", "Model.field2" => "DESC");

(per this page)

【讨论】:

  • 我也试过了,但没用。这应该在控制器的顶部指定吗?
  • 不,你的应该可以。但是您仍然没有向我们展示有关如何实际检索数据的关键部分。可能是你的错误。
  • @KieranYo - 即使这不能解决您的问题,我也会将其保留为非数组,然后继续寻找。我遇到过很多次类似的问题,我总是通过删除数组来解决它。
  • @mark 之后我所做的就是 $result = $this->paginate();或 $result = $this->paginate('Cars');两者的结果相同。
  • @KieranYo - 我相信它应该是单数:$this->Paginate('Car');
【解决方案2】:

原来我在 url 参数中使用了 :sort。一旦我把它拿出来,一切都很好:)

【讨论】:

    【解决方案3】:

    还要注意,分页时默认忽略虚拟字段。

    请参阅Cake 2.0 Pagination 文档中的“控制用于排序的字段”。

    例子:

    $this->MyModel->virtualFields['count'] = 0;
    $this->Paginator->settings = array(
            'fields' => 'COUNT(id) AS MyModel__count',
            'group' => ('MyModel.group_id'),
            'order' => array('MyModel__count' => 'DESC'),
        );
    // IMPORTANT: pass sortable fields including the virtual field as 3rd parameter:
    $log = $this->Paginator->paginate('MyModel', null, array('MyModel__count', 'id'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2014-07-12
      • 2012-06-27
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多