开始使用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
中运行。
非常感谢任何帮助或指导。
答案 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。 这是一种更清晰的方式(至少在我看来)管理查找选项,一旦将它们设置为变量就可以重用。