CakePHP:如何使分页器组件使用不同计数?

2023-12-26

我正在使用以下代码进行简单的分页:

$paginate = array(
    'limit' => 30,
    'fields' => array('DISTINCT Doctor.id','Doctor.*'),
    'order' => array('Doctor.id' => 'desc'),
    'joins' => array(
        array('table' => 'doctors_medical_degrees',
            'alias' => 'DoctorsMedicalDegree',
            'type' => 'INNER',
            'conditions' => array(
                'Doctor.id = DoctorsMedicalDegree.doctor_id',
            )
        ),
    ),
    'recursive' => -1,
);
$this->Paginator->settings = $paginate;
$data = $this->Paginator->paginate('Doctor');

现在的问题是我正在使用内部联接,因此对于不同的结果我使用不同的 Doctor.id,但是在进行分页查询时,cakephp 的计数查询不包括不同的 Doctor.id

'query' => 'SELECT COUNT(*) AS `count` FROM `pharma`.`doctors` AS `Doctor` INNER JOIN `pharma`.`doctors_medical_degrees` AS `DoctorsMedicalDegree` ON (`Doctor`.`id` = `DoctorsMedicalDegree`.`doctor_id`)'

如你所见 否

计数(不同的 Doctor.id)

因此分页返回更多实际可以返回的结果


问题是分页器不会将字段传递给find('count')调用,所以默认情况下它将始终依赖*.

但即使它会传递字段,传递数组也会使find('count')调用期望要计数的字段作为COUNT()表达式,即类似的东西

'fields' => array('COUNT(DISTINCT Doctor.id) as `count`')

然而,这无论如何都不适用于分页器,所以你需要的是一个定制的find('count') call.

自定义查询分页来救援

See Cookbook > 分页 > 自定义查询分页 http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html#custom-query-pagination了解更多信息。

自定义查询分页可能是您最好的选择,这样计数的方式完全取决于您。

例如,您可以利用分页器组件传递的额外值,这样您就可以将字段传递给 find('count')` 调用,如下所示(未经测试的示例代码):

class Doctor extends AppModel {
    // ...

    public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
        $parameters = compact('conditions');
        if($recursive != $this->recursive) {
            $parameters['recursive'] = $recursive;
        }

        if(!empty($extra['countField'])) {
            $parameters['fields'] = $extra['countField'];
            unset($extra['countField']);
        }

        return $this->find('count', array_merge($parameters, $extra));
    }
}
$this->Paginator->settings = array(
    'limit' => 30,
    'fields' => array('DISTINCT Doctor.id','Doctor.*'),
    // ...
    'countField' => 'DISTINCT Doctor.id'
);
$data = $this->Paginator->paginate('Doctor');

然后这应该创建一个COUNT查询看起来像

SELECT COUNT(DISTINCT Doctor.id) AS `count` ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CakePHP:如何使分页器组件使用不同计数? 的相关文章

  • 在分页数之间添加点

    我已经用 PHP 和 AJAX 为表格编写了分页代码 每页将显示表格的 8 行 到这里为止一切正常 我现在需要的是使分页看起来像一系列数字和它们之间的点 如下所示 1 2 3 27 28 29 我有两个用于分页的文件 conf php
  • 如何对很多很多页面进行页面导航?对数页面导航

    显示许多页面的页面导航的最佳方式是什么 最初这是作为操作提示发布的 我的答案包含在问题中 我现 在将我的答案分成下面的 答案 部分 更具体 假设您要向用户显示一组记录 这些记录分为固定大小的页面 例如 Google 搜索的结果 如果只有几个
  • Cakephp 验证后,所有表单字段都为空,并出现表单错误

    我有问题 我尝试填写表单 然后单击提交按钮 然后它显示表单错误 但所有文本框字段都变为空白 并且可以显示表单错误 我希望它变得与验证之前相同的值 就像我不想在验证后清除 清空值一样 我做了这样的事情 在视图中 div class regfo
  • Cakephp 图像 - 无法确定 mimetype

    蛋糕PHP 2 3 我正在上传图像 但出现错误 Can not determine the mimetype Error An Internal Error Has Occurred 在我的模型上 这是我的 validation 的一部分
  • SQL 错误:1452:无法添加或更新子行:外键约束失败

    我的数据库中有两个表 order course order有一个专栏courseid哪个参考列id of the course桌子 每当我尝试做的时候saveAll in CakePHP以上SQL将显示错误并且不会保存数据 听起来是在数据库
  • 剑道网格服务器端过滤并且不工作

    我正在使用 Kendo 网格 具有服务器端过滤 排序和分页功能 这是我初始化网格的代码 在此代码中 服务器端分页和虚拟滚动正常工作 但过滤和短路不起作用 在任何请求中 我都会得到这个 请求参数的类型 HttpPost public Json
  • CakePHP 验证错误消息

    我正在尝试修改 CakePHP 显示错误消息的方式 下面是用于显示错误的通用模板 div class error message Please enter at least 3 characters div 我想像下面这样设置错误的样式
  • CakePHP 后退和前进按钮没有布局

    我们正在 CakePHP 中构建一个大型 CMS 并集成了 Croogo 安装 我们最近遇到了一个问题 当用户单击back在浏览器中 或forward按钮 您最终得到的是使用以下命令的视图 ctp 文件blank布局 所以没有样式 js 等
  • 将变量从 PHP 传递到 JavaScript 的有效方法[重复]

    这个问题在这里已经有答案了 有时我必须将一些变量从 PHP 传递到 JS 脚本 现在我是这样做的 var js variable 但这非常丑陋 我无法在 js 文件中隐藏我的 JS 脚本 因为它必须由 PHP 解析 处理这个问题的最佳解决方
  • 自定义帖子 wp_query 的分页

  • CSS 不适用于 CakePHP 应用程序

    我在使用 CakePHP 时遇到问题 找不到 CSS 当我在浏览器中查看源代码时 我可以在头部看到蛋糕通用 CSS 链接 但是当我点击它查看实际的源代码时 我收到了 404 未找到错误 Update 我已按照此处的说明进行操作 http b
  • 如何将序列化的 JSON 视图数据输出为对象数组,而不是包装在外部对象中?

    我正在将 CakePHP 数组的返回值转换为 JSON 目前如下 platformusers id 1 name user1 id 3 name user3 我希望它是这样的 id 1 name user1 id 3 name user3
  • Codeigniter 分页:运行查询两次?

    我正在使用 codeigniter 和分页类 这是一个非常基本的问题 但我需要确保我没有遗漏任何东西 为了获得对从 MySQL 数据库获取结果进行分页所需的配置项 基本上需要运行查询两次 对吗 换句话说 您必须运行查询来确定记录总数 然后才
  • cakephp 3.0 如何使用值而不是 id 填充选择字段

    我一直在寻找以前的答案 但我找到的答案与旧的 cakephp 版本有关 我有两个表 杂志 和 问题 其中存在关系 问题 属于 杂志 问题表如下所示 public function initialize array config this g
  • 当复选框条件更改时,如何使用ajax更新mysql数据库?

    我有一个在客户端按行显示的文章表 每篇文章都有一个唯一的 ID 并包含一个复选框以指示该文章是否被选中为收藏夹 如果它是最喜欢的 则该复选框已被选中 如果没有 则未选中 现在 如果特定于每一行的复选框条件发生变化 我需要 js 或 jque
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • Cakephp 自定义日期输入表单助手的输出

    I got echo this gt Form gt input birthdate array label gt Geburtsdatum true dateFormat gt DMY minYear gt date Y 70 maxYe
  • CakePHP 多站点(如 WPMU + 域映射)...可能吗?

    所以我刚刚开始使用 CakePHP 想知道是否可以执行以下操作 一次安装 Cake 并使用超级管理员登录 然后 管理员有权访问指定的 子站点 并能够在这些子站点上创建 编辑内容和用户 最后 能够将域名 不是子域 而是唯一域 映射到路由 所以
  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • 子目录中的 CakePHP 控制器和模型

    你好 我想知道如何将我的组件和模型放在子目录中 假设我有一个 Web 应用程序 它有 3 个不同的区域 管理员 用户 开发人员 每个区域执行不同的操作并具有完全不同的界面 所以我希望管理员去http www site com admin h

随机推荐

  • 如何在 Django 模板上实现“后退”链接?

    我正在使用Django http www djangoproject com 我想知道是否有一种简单的方法可以使用模板系统创建指向上一页的 返回 链接 我认为在最坏的情况下 我可以从视图函数中的请求对象获取此信息 并将其传递给模板渲染方法
  • 如何判断一个URL是否是内网URL?

    使用 C 如何确定 URL 是否为 Intranet URL 如果 URL 是内联网而不是公共 URL 我想要一些代码来执行某些操作 你不可能隐含地知道 如果您的 Intranet URL 看起来像完全合格的域名 那么就很难辨别 唯一的判断
  • 如何在javascript中处理大数字[重复]

    这个问题在这里已经有答案了 我正在寻找一个处理真正 长 大 巨大 风暴 数字的数学解决方案 我还没有发现任何东西 但我不想认为这个问题目前还没有解决 我正在寻找一个简单的数字解决方案 例如 Microsoft Excel Precision
  • 如何在 Rails 6 的视图中使用 JQueryUI

    我在 Rails 6 应用程序中使用 JQuery 和 JQueryUI 时遇到困难 JQuery 和 JqueryUI 都在 application js 中工作 但是 JQueryUI 无法在视图中工作 我该如何让它在这两种情况下都起作
  • GridView 中 TemplateField 上的标头

    当我使用超链接创建 TemplateField 时 如何在 GridView 中创建标题 全名 例如 我希望 TemplateField 中的这些行具有标题 全名
  • 更新单个嵌入式文档中 MongoDB 中的单个字段

    我们有一些嵌入式文档 如下所示 id ObjectId 4e402353bc9f6ec5a6000001 first name Chris last name Jones alerts id ObjectId 4f7cd6ffc067db0
  • 从 json 序列化对象中删除空字符串属性

    我有课 它有几个属性 假设有 10 个 在这 10 个属性中 3 个填充了数据 其余 7 个为空白 即空字符串 使用了这个link https stackoverflow com questions 15574506 how to remo
  • 在 AWS Athena 中重用子查询会生成大量扫描数据

    在AWS Athena上 我尝试使用WITH子句重用计算数据 例如 WITH temp table AS SELECT FROM temp table t0 temp table t1 temp table t2 WHERE 如果查询速度很
  • 如何检测套接字断开连接? / 如何调用带有超时的socket.recv?

    我正在使用 gevent 修补套接字连接到流媒体服务器 并且我正在使用 adsl 连接 我不控制服务器 但在我的测试中 如果我停止服务器 我可以通过检查recv的结果是否为空字符串来检测断开连接 但如果我关闭adsl调制解调器recv永远不
  • 具有多个因子组的 x 轴 ggplot

    我是 R 的新手 我有气候数据 如下面几行所示 数据表明相对于历史气候的温度变化 我想创建一个箱线图 ggplot 如下所示 我正在尝试弄清楚如何创建这种情节 任何帮助将不胜感激 DATE TMAX TMIN 1 1 2010 2 9275
  • PHP:如何按字母顺序对数组的值进行排序?

    我想在 PHP 中按字母顺序对数组的值进行排序 如果所有值都以相同字符开头 则应使用第二个字符对它们进行排序 依此类推 忽略大小写 例如 before values 0 programming values 1 Stackoverflow
  • 如何从 Azure 函数 url 中删除“api”一词

    当您创建 Http 触发的 API 时 Azure 函数将其托管在 https function app name azurewebsites net api Route configured in application 有没有办法从 U
  • 将 Unity WebGL 项目导入 Angular2 组件

    我正在寻求将 Unity WebGL 项目集成到 Angular2 应用程序中 将所有这些脚本移动到 Angular2 组件中的正确方法是什么 首先 Unity WebGL 导出一个index html 如下所示
  • Spring什么时候在bean的生命周期中创建代理?

    如果我使用 Spring AOP 在 applicationcontext 生命周期代理的哪个点被创建 bean 实例创建后 它们会运行一系列的操作Bean后处理器 http static springsource org spring d
  • Rails4中的嵌套简单表单 - 有很多通过,保存多个记录

    我通过关系得到了一个标准的 has many 人类通过一个连接表与许多兽人进行交互 交互只是一个表格和模型 没有控制器或视图 使用 Rails 4 中的 simpleform gem 我想从人类页面创建一个表单 以便从所有兽人池中选择多个兽
  • 实体框架添加现有项目导致克隆

    我正在将实体框架 v4 用于一个小项目 通常我使用 NHibernate 我的问题是 我无意中添加了一个已保存到 DB Context 集合中的对象的代码 当我执行 SaveChanges 时 EF 复制了该对象 并为其提供了一个新的主键
  • 弹出模式在页面顶部被切断

    这是模态的现场演示 https cdn rawgit com Twinbird24 tbk popup 8fb4e760 index html 它应该在几秒钟后打开 更新 此链接现在显示完成的版本 这是包含所有文件的 GitHub 存储库
  • 通过ssl从celery连接到redis后没有响应

    我正在跟进this https blog miguelgrinberg com post using celery with flask教程 并将 Celery 后台相关代码调整到我的项目中 就我而言 我在 Docker 环境中运行 并且我
  • Google Drive Rest Api 文件导出限制

    我使用休息 API https www googleapis com drive v3 files fileId export https www googleapis com drive v3 files fileId export 参考
  • CakePHP:如何使分页器组件使用不同计数?

    我正在使用以下代码进行简单的分页 paginate array limit gt 30 fields gt array DISTINCT Doctor id Doctor order gt array Doctor id gt desc j