php - CakePHP 分页,条件为 has_many

标签 php sql cakephp

所以我有一个用户表和一个历史表,其中用户有许多历史记录,并且我正在尝试在用户表上实现分页。

我的问题是我有搜索功能,并且可以搜索的一些内容是“历史记录”表中的内容。有没有办法根据 hasMany 关联的表中的数据过滤分页结果? Containable 最初看起来像是一个解决方案,允许进行此类过滤,但仅限于检索关联数据,而不是记录本身(除非我遗漏了某些内容?)

以前有人解决过这个问题吗?

最佳答案

由于它是一个 hasMany 关系,这意味着 Cake 将需要进行 2 个单独的查询:第一个在 users 表上,另一个在 histories 表上以检索所有关联。由于直到第二次查询时才会检索历史数据,因此无法通过历史模型中找到的字段的 WHERE 条件来过滤您的第一个查询。

要解决此问题,您可以执行以下两种操作之一:

  1. 使用 Containable 对历史记录执行分页(因为历史记录属于用户,意味着只会执行 1 个查询)。

  2. 按照您已经执行的方式对 User 执行分页,除了对 History 执行临时联接,使其不再是 hasMany 关系。

例如:

$this->User->bindModel(array('hasOne' => array('History')));
$this->paginate['User']['contain'][] = 'History';
$this->paginate('User', array('History.some_field' => 'some_value'));

关于php - CakePHP 分页,条件为 has_many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1694047/

相关文章:

php - 为什么我应该在 Stripe 收费之前创建一个客户对象?

MYSQL (NOT IN) 查询很慢

mysql - CakePHP 模型之间的两种关系

php - 通过单击复选框过滤搜索结果

php - PHP 和 Weblogic 服务器的错误

javascript - 提交表单 onchange 复选框

php - Ajax 为 IE 报告 '1'

mysql - 使用 MySQL 计算字符串中字符的出现次数

sql - PL/Sql过程vs函数?

php - 为什么 CakePHP 在我的表单中呈现下拉列表而不是文本框?