在CakePHP中一起搜索和分页插件,在我的模型中未与HasMany集成



我使用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']

最新更新