CakePHP - 加入表格后对数据进行分页

Posted

技术标签:

【中文标题】CakePHP - 加入表格后对数据进行分页【英文标题】:CakePHP - Paginate data after joining tables 【发布时间】:2015-04-17 09:54:59 【问题描述】:

我在对连接 2 个表的数据进行分页时遇到问题。在我的数据库中,我有 2 个表:

产品:

product_id 产品名称

价格:

product_id product_price

两个表之间的关系是,一个产品可以有许多不同的价格(在许多商店)。我想显示产品列表并以最便宜的价格订购它们。所以,这就是我到目前为止所做的:

        $this->paginate = array(
            'joins' => array(
                    array(
                            'table' => 'price',
                            'alias' => 'Price',
                            'conditions' => array(
                                    'Product.product_id = Price.product_id'
                            )
                    )
            ),
            'fields' => array(
                    'Product.product_id',
                    'Product.product_name',
                    'MIN(Prices.product_price) AS min_price'
            ),
            'order' => array('min_price' => 'ASC'),
            'limit' => 10,
            'group' => 'Product.product_id'
        );

这是加入后返回的数据:

[Product] => Array
       (
            [product_id] => 1
            [product_name] => iPhone 6 Plus 64GB
       )

[0] => Array
       (
            [min_price] => 20290000
       )

但列表不能按新字段“min_price”排序。它是按 id 排序的。如果我将“订单”参数更改为“产品名称”,则分页工作......

【问题讨论】:

Cakephp 中的命名约定希望表的 ID 被命名为“id”。 @James 好的,谢谢你的提醒:D 【参考方案1】:

在执行查找之前,使用虚拟字段将min_price 定义为MIN(Prices.product_price)(如here 所述)

$this->Product->virtualFields['min_price'] = 'MIN(Prices.product_price)';

那么find的field数组就简化为:

    $this->paginate = array(
        'joins' => array(
                array(
                        'table' => 'price',
                        'alias' => 'Price',
                        'conditions' => array(
                                'Product.product_id = Price.product_id'
                        )
                )
        ),
        'fields' => array(
                'Product.product_id',
                'Product.product_name',
                'min_price'
        ),
        'order' => array('min_price' => 'ASC'),
        'limit' => 10,
        'group' => 'Product.product_id'
    );

【讨论】:

以上是关于CakePHP - 加入表格后对数据进行分页的主要内容,如果未能解决你的问题,请参考以下文章

带有连接表字段排序的 Cakephp 分页不起作用

关于PageHelper分页问题。我用PageHelper分页查询后对查询的结果进行添加删除操作后,怎样保证pageInfo

在 CakePHP 中对搜索结果进行分页

布局中的 CakePHP 动态菜单内容

CakePHP 2.2.4 无法使用 HAVING 子句和计算字段对结果进行分页 - Haversine 公式

Cakephp 分页按计算字段排序( COUNT )