我遇到了从连接2个表中分页数据的问题。在我的数据库中,我有两个表:
产品:
价格:
2个表之间的关系是,产品可以有许多不同的价格(在许多商店中)。我想显示产品清单,并以最便宜的价格订购。所以,这就是我到目前为止所做的:
$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排序。如果我将'order'参数更改为'product_name',则分页有效......
答案 0 :(得分:0)
在执行查找之前,使用虚拟字段将min_price
定义为MIN(Prices.product_price)
(如所述here)
$this->Product->virtualFields['min_price'] = 'MIN(Prices.product_price)';
然后将find的字段数组简化为:
$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'
);