【发布时间】:2016-06-14 09:38:33
【问题描述】:
我正在尝试在 CakePHP 3 中对 MySQL 存储过程的结果进行分页。目前,我的存储过程按预期工作,我可以在 CakePHP 中成功调用它,并且分页器几乎可以正常工作。它正在删除一列 (customer_name),并显示 user_id 而不是给定 user_id 的用户名。我正在使用 CacheSP 插件来调用 SP。 https://github.com/genellern/Cakephp3-CacheSP
这是我的存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ordersIndex`()
BEGIN
SELECT o.id, o.order_number, DATE_FORMAT(o.created, '%m/%d/%y %h:%s %p') AS
created, d.customer_name, o.order_amount, u.username, o.status FROM orders AS o
INNER JOIN order_details AS d
ON o.order_number=d.order_number
INNER JOIN users as u
ON o.created_by=u.id;
END
下面是调用存储过程的代码:
$orderQuery = $this->Orders->callSP('ordersIndex');
$orderRecords = $orderQuery->fetchAll('assoc');
debug($orderRecords);
$orderQuery->closeCursor();
产生这种结构:
[
(int) 0 => [
'id' => '43',
'order_number' => '51',
'created' => '02/17/16 06:10 PM',
'customer_name' => 'cust test',
'order_amount' => '72015.00',
'username' => 'BSounder',
'status' => 'pending'
],
(int) 1 => [
'id' => '44',
'order_number' => '84',
'created' => '02/18/16 05:06 PM',
'customer_name' => 'cust test',
'order_amount' => '500.00',
'username' => 'BSounder',
'status' => 'pending'
],
....
]
为了让分页器与自定义查询一起工作,我关注/调整了以下链接中的两个函数:http://technet.weblineindia.com/web/pagination-with-custom-queries-in-cakephp/ 这导致了这些功能:
public function paginate($conditions, $fields, $order, $limit, $page =1,
$recursive = null, $extra = array())
{
$recursive = -1;
$this->useTable = false;
$results = $this->Orders->callSP('ordersIndex');
debug($results);
return $results;
}
public function paginateCount($conditions = null, $recursive = 0, $extra = array())
{
$this->recursive = $recursive;
$results = $this->Orders->callSP('ordersIndex');
return count($results);
}
查看订单/索引时,除了“客户名称”列为空并且“创建者”列显示 user_id 而不是用户的用户名之外,一切正常。任何帮助将不胜感激! :)
【问题讨论】:
标签: php mysql cakephp pagination cakephp-3.0