所以我有一个用户表和一个历史表,其中用户有许多历史记录,并且我正在尝试在用户表上实现分页。
我的问题是我有搜索功能,并且可以搜索的一些内容是“历史记录”表中的内容。有没有办法根据 hasMany 关联的表中的数据过滤分页结果? Containable 最初看起来像是一个解决方案,允许进行此类过滤,但仅限于检索关联数据,而不是记录本身(除非我遗漏了某些内容?)
以前有人解决过这个问题吗?
最佳答案
由于它是一个 hasMany 关系,这意味着 Cake 将需要进行 2 个单独的查询:第一个在 users 表上,另一个在 histories 表上以检索所有关联。由于直到第二次查询时才会检索历史数据,因此无法通过历史模型中找到的字段的 WHERE 条件来过滤您的第一个查询。
要解决此问题,您可以执行以下两种操作之一:
使用 Containable 对历史记录执行分页(因为历史记录属于用户,意味着只会执行 1 个查询)。
按照您已经执行的方式对 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/