2009-11-07 26 views
2

所以我有一个用户表和一个用户hasMany历史的历史表,我试图在用户表上实现分页。CakePHP分条条件has_many

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

有没有人需要解决这个问题?

回答

5

由于它是一个hasMany关系,这意味着Cake将需要做两个单独的查询:在用户表上一个,在历史表上一个用于检索所有关联。由于历史数据直到第二个查询才被检索,因此您的第一个查询无法通过WHERE条件筛选历史记录模型中找到的字段。

要解决这个问题,你可以做两件事情之一:

  1. 使用中可容纳(因为历史属于关联用户,这意味着只有1查询将被执行)的历史进行分页。

  2. 按照您已经在做的方式对用户执行分页,除了执行对历史记录的临时连接以使其不再是hasMany关系。

例如为:

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

太谢谢你了!在花了几个小时之后,我无法相信答案如此简单。 – Micah

+0

我可能会误读,但看起来您只在答案中显示了选项2的代码。你可以请求显示选项1的代码吗?此外,这段代码似乎并不适用于我。 – geoidesic