在非对象()上调用成员函数find()

时间:2016-01-06 12:33:50

标签: cakephp cakephp-3.0

开始使用CakePHP 3.0后,我发现docummentation非常令人困惑,因为通过以下代码片段我已经创建了以下代码:

    if($this->Auth->User('role') != 'Admin' ){
             $query = $users->find('all')
                ->where(['Users.group_id' => $this->Auth->User('group_id')]);
             $this->set('users', $this->paginate($query->all()));
    }else{
        $this->set('users', $this->paginate($this->Users));
    }

如果用户是管理员,那么运行得非常好,如果他不是,那么代码就会在此行中断开:$query = $users->find('all')

正在提供以下信息:

Call to a member function find() on a non-object 

代码在users controller中运行。

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:1)

请改为尝试:

if($this->Auth->User('role') != 'Admin' ){

    $options = [ 
            'conditions' => array(
                "Users.group_id" => $this->Auth->User('group_id')
            )];

         $query = $users->find('all', $options);


    $this->set('users', $this->paginate($query));
}else{
    $this->set('users', $this->paginate($this->Users));
}

我认为您的问题是您实际上是在打电话找到'不正确。

$query = $users->find('all') ->$options

(不是你的确切代码,但基本上你所做的,以帮助比较我的解决方案)应

$query = $users->find('all', $options)

上面声明了$ options。 这是一种更清晰的方式(至少在我看来)管理查找选项,一旦将它们设置为变量就可以重用。