一尘不染

在has_many上带有条件的CakePHP分页

sql

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

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

有人必须解决吗?


阅读 142

收藏
2021-03-08

共1个答案

一尘不染

由于它具有hasMany关系,因此Cake将需要进行2个单独的查询:1个在users表上,1个在history表上以检索所有关联。由于在第二次查询之前不会检索历史记录数据,因此无法通过WHERE条件过滤历史记录模型中找到的字段的第一条查询。

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

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

  2. 对用户执行分页操作,只是执行对历史记录的临时联接,以使其不再具有hasMany关系。

例如:

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