CakePHP分页条件有has_many

时间:2009-11-07 18:58:14

标签: php sql cakephp

所以我有一个User表和一个带有User hasMany Histories的History表,我正在尝试在用户表上实现分页。

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

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

1 个答案:

答案 0 :(得分:5)

由于它是一个hasMany关系,这意味着Cake需要进行2次单独的查询:在users表上有1个,在historyies表上有1个用于检索所有关联。由于在第二次查询之前未检索历史数据,因此无法通过历史模型中找到的字段的WHERE条件过滤第一个查询。

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

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

  2. 按照您正在进行的方式对用户进行分页,但对历史记录执行ad-hoc联接,使其不再是hasMany关系。

  3. e.g:

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