使用CakePHP分页对计算字段进行排序

Sha*_*ron 1 pagination cakephp

我正在尝试获取分页结果列表,但我希望选择在计算字段上对它们进行排序.

我有这个:

$this->Paginator->settings = array(
        'fields' => 'COUNT(Invoice.id) as totalInvoices,
                 SUM(Invoice.price_paid) as totalPaid,
                 MAX(Invoice.invoice_date) as latestInvoice',
        'group' => array('Invoice.supplier_id'),
        'order' => array($order => $direction)
    );
Run Code Online (Sandbox Code Playgroud)

$ order是要排序的字段的名称,$ direction只是'asc'或'desc'.

如果我对数据库中存在的字段进行排序,就像'price_paid'按照每个数量的顺序查找发票或其他任何内容,这很好,但它似乎不能应对totalPaid或latestInvoice上的排序 - 我只是得到未分类的结果.

我尝试通过例如创建一个虚拟字段

$this->Invoice->virtualFields['latestInvoice'] = 'MAX(Invoice.invoice_date)';
$order = "Invoice.latestInvoice";
Run Code Online (Sandbox Code Playgroud)

但这似乎没有任何区别 - 排序顺序仍然被忽略.

我在网上寻找解决方案,但他们似乎都通过使用虚拟字段来解决问题,这显然对我不起作用!

Bha*_*ari 5

我尝试使用虚拟字段,它对我来说工作正常下面是我的代码可能有帮助: -

$this->Invoice->virtualFields['latestInvoice'] = 'MAX(Invoice.invoice_date)';
$order = "Invoice.latestInvoice";
$options = array(               
                'fields' => 'COUNT(Invoice.id) as totalInvoices,
                      SUM(Invoice.price_paid) as totalPaid,
                      MAX(Invoice.invoice_date) as latestInvoice',
                'order' => array($order =>'asc'),
            );
$this->paginate = $options;
$list = $this->paginate('Invoice');
pr($list);die;
Run Code Online (Sandbox Code Playgroud)

同时检入虚拟字段是否在$ list中的数组.