我使用SearchDC插件进行搜索和分页插件。我在控制器中执行了一个显示用户的操作,如果用户只想查看在线用户,我会有一个勾选框。为此,我使用UserLogin表,并检查用户在过去1/2小时内是否在线。
$this->User->bindModel(array(
'hasMany' => array(
'UserLogin' => array(
'className' => 'UserLogin',
'conditions' => array(
'UserLogin.lastaction_timestamp > DATE_SUB(NOW(), INTERVAL 30 MINUTE)',
'UserLogin.logout_timestamp is null',
),
)
)
), false);
$this->{$this->modelClass}->data[$this->modelClass] = $this->passedArgs;
if ($this->{$this->modelClass}->Behaviors->attached('Searchable')) {
$parsedConditions = $this->{$this->modelClass}->parseCriteria($this->passedArgs);
} else {
$parsedConditions = array();
}
$parsedConditions = array_merge($parsedConditions,array('User.status' => '1'));
$this->Paginator->settings[$this->modelClass]['contain'] = array( 'UserDetail.first_name',
'UserDetail.last_name', 'UserDetail.institution_type', 'UserLogin'
);
$this->Paginator->settings[$this->modelClass]['conditions'] = $parsedConditions;
$users = $this->paginate();
$this->set(compact('users'));
我试图添加一个条件来从UserLogin表中筛选不相关的,但我使用查询的DebugKit检查的结果是没有将UserLogin加入User表,这很好。否则我会得到多个条目。
我试图实现的是在UserLogin中消除与Users之间的行,而不产生任何结果。我想使用"遏制行为",但没有奏效。也想过用哈希,但那我就毁了分页。
不能以这种方式使用hasMany。看到这个非常详细的答案相同的问题:
插件的两个模型之间的查询错误-CakePHP
它不起作用,因为(取自上面的答案):
第一个查询检索主模型数据,但不加入关联表,而第二个表使用第一个表中的ID查询结果以获取关联的记录,然后合并这些记录结果。
最后我决定用一个快速的解决方案,虽然不是最好的,但有效。
$this->{$this->modelClass}->data[$this->modelClass] = $this->passedArgs;
if ($this->{$this->modelClass}->Behaviors->attached('Searchable')) {
$parsedConditions = $this->{$this->modelClass}->parseCriteria($this->passedArgs);
if (isset($this->passedArgs['is_online']) && $this->passedArgs['is_online'] === '1')
这使我可以进行不同的查询。我添加到其中一个
$this->Paginator->settings[$this->modelClass]['joins'] with
$this->Paginator->settings[$this->modelClass]['group']