【问题标题】:CakePHP: unable to order by multiple criteriaCakePHP:无法按多个条件排序
【发布时间】:2013-12-13 17:00:58
【问题描述】:

我正在使用 CakePHP,我已经阅读了 the documentation 关于检索数据的内容,它清楚地表明多个 ORDER BYs 是可能的。但是,我无法让它工作。它只适用于一个,但是当我将它更改为具有两个字符串的数组时,似乎都不适用。我做错了什么?

private function _bundle_users( $report ) {

    $this->loadModel("User");
    $conditions = array(
        'ReportsUser.report_id' => $report['Report']['id']
    );

    //$order = 'ReportsUser.created DESC'; //THIS WORKS FINE
    $order = array( //THIS SEEMS TO RESULT IN BOTH GETTING IGNORED
            'ReportsUser.created DESC', 
            'User.last_name ASC',
            );
    $this->User->bindModel(array('hasOne' => array('ReportsUser')), false);
    $this->paginate = array('conditions'=>$conditions, 'contain'=>array('ReportsUser', 'Attempt'=>array('order' => 'Attempt.created DESC'), 'Tag', 'Resume', 'School'),
        'order'=>$order
        );
    $users = $this->Paginate('User');
    return $users;
}

我认为我正在做与this example 完全相同的事情,但bindModel() 除外。也许这是一个相关的线索。

更新1

这按预期工作:$order = 'ReportsUser.created DESC';

但这被忽略了:$order = array('ReportsUser.created DESC');

似乎数组语法是问题的一部分。

更新2

当我使用 key => value 格式时,数组语法也会被忽略:'ReportsUser.created' => 'DESC'

更新3 感谢@Leonard,this 有效,尽管文档说了什么:

$order = 'ReportsUser.created DESC, User.last_name ASC';

【问题讨论】:

  • 瞪眼,吃蛋糕的人。
  • 根据文档,这不是要走的路,但是您是否尝试过:$order = 'ReportsUser.created DESC, User.last_name ASC';
  • @Leonardo 哇!这完全不是它应该如何工作,但它可以。是什么让你产生了尝试的想法?
  • @SDP 只是 SQL 逻辑,我会添加它作为答案。我很高兴它成功了......

标签: php mysql sql cakephp cakephp-2.0


【解决方案1】:

对 CakePHP 不是很精通,但是阅读文档后,我会尝试一下:

$order = array(
    'ReportsUser.created' => 'desc',
    'User.last_name' => 'asc',
);

【讨论】:

  • 谢谢。我实际上也只是尝试过这个,但它被忽略了。请参阅上面关于数组语法的更新。
【解决方案2】:

根据文档,这不是要走的路,但是您尝试过吗:

$order = 'ReportsUser.created DESC, User.last_name ASC';

?

【讨论】:

  • 最好使用数组顺序子句而不是所有在一个字符串中
  • 是的,最好还是这样做。 cake 中没有任何东西会阻止使用数组条件,所以我建议要么检查你的代码是否有隐藏的错误,要么确保你使用的是最新版本的 CakePHP。我知道最近在分页中使用 order 并将 $order 作为模型中的属性时发现了一个错误
猜你喜欢
  • 2013-09-13
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2023-01-09
  • 2011-03-10
相关资源
最近更新 更多