Php 按顺序排列和订购

Php 按顺序排列和订购,php,cakephp,Php,Cakephp,感觉好像我什么都试过了,所以我现在来找你 我正试图整理我的数据,但进展不太顺利,有点新鲜 这是我的代码: $this->set('threads', $this->paginate('Thread', array( 'Thread.hidden' => 0, 'Thread.forum_category_id' => $id, 'order' => array( 'Thread.created'

感觉好像我什么都试过了,所以我现在来找你

我正试图整理我的数据,但进展不太顺利,有点新鲜

这是我的代码:

$this->set('threads', $this->paginate('Thread', array(
        'Thread.hidden' => 0,
        'Thread.forum_category_id' => $id,
        'order' => array(
            'Thread.created' => 'desc'
        )
    )));
它会生成一个SQL错误,这是最后一个有趣的部分:

AND `Thread`.`forum_category_id` = 12 AND order = ('desc') ORDER BY `Thread`.`created` ASC LIMIT 25
我怎样才能解决这个问题?创建的字段显然存在于数据库中:/

试试看

$this->set('threads', $this->paginate('Thread', array(
        'Thread.hidden' => 0,
        'Thread.forum_category_id' => $id
    ),
    array(
        'Thread.created' => 'desc'
    )
));
我不是蛋糕师傅,只是猜测而已

编辑。是的,没错。蛋糕节选:

控制用于排序的字段 ...
$this->paginate('Post',array(),array('title',slug')


因此,顺序是第三个参数。

当使用多个过滤器(即顺序、限制…)时,需要传入
条件
键。如果只指定条件,则可以直接将其作为第二个参数传递

这应该做到:

$this->set('threads', $this->paginate('Thread', array(
        'conditions' => array(
            'Thread.hidden' => 0,
            'Thread.forum_category_id' => $id
        ),
        'order' => array(
            'Thread.created' => 'desc'
        )
    )));
或者更清楚一点:

$this->paginate['order'] = array('Thread.created' => 'desc');
$this->paginate['conditions'] = array('Thread.hidden' => 0, ...);
$this->paginate['limit'] = 10;
$this->set('threads', $this->paginate());
如果出现错误,请添加
public$paginate到控制器的顶部

试试看

$all_threads = $this->Threads->find('all', 
            array(
                'order' => 'Threads.created'
            )
        );
        $saida = $this->paginate($all_threads,[
            'conditions' => ['Threads.hidden' => 0]
        ]);

在按顺序分页时,有几件事需要注意。对于Cake 3.x,您需要:

1) 确保已将字段包括在“sortWhitelist”中

$this->paginate = [

        'sortWhitelist' => [
            'hidden', 'forum_category_id', 
        ],


    ];
2) 对于“订单”,如果将其置于$this->paginate下,则无法在视图中对该字段进行排序。因此,最好将“订单”放在查询中(遗憾的是,文档中没有说明这一点)


查询运行,但没有排序:/@cubsink您可以查看新生成的SQL吗?接受您的答案,因为它是正确的,您是第一位:)答案有点错误。第三个参数是
白名单
,因此您只能指定两个字段,这些字段可以通过分页助手中的命名参数
排序
进行排序。但是实际的排序参数仍然需要在options数组(第二个参数)或$this->pagination['Model']['order']中设置,因为刚刚意识到公共分页已经通过order语句设置在顶部。我在那里瞎了一会儿。谢谢
$query = $this->Thread->find()
->where( ['Thread.hidden' => 0, 'Thread.forum_category_id' => $id, ] )
->order( ['Thread.created' => 'desc'] );

$this->set('threads', $this->paginate($query)