1

我在我的一个控制器的索引函数中不断收到“调用非对象上的成员函数”错误。这是代码:

class ModulesController extends AppController {
     public $uses = array('Module', 'User');
     public $scaffold;
     function index() {
     if ($this->request->is('get')) { //Technically unecessary but good practice
       $email = AuthComponent::user('email'); 
       $user = $this->Module->User->findByEmail($email);
      //Code omitted
     }
}

这是我的模块模型:

class Module extends AppModel {
public $name = 'Module';
public $hasMany = array(
    'Slide' => array(
        'className'  => 'Slide',
        'foreignKey' => 'module_id',
        'order' => 'Slide.position ASC' //Let's make sure that name is correct
        ));
public $belongsTo = array(
    'Creator' => array(
        'className' => 'User'));    
public $hasAndBelongsToMany = array(
    'OUser' => array(
       'className'              => 'User',
       'joinTable'              => 'modules_users',
       'foreignKey'             => 'module_id',
       'associationForeignKey'  => 'user_id',
       'unique'                 => 'keepExisting',
    ));
       } //Unnecessary code omitted 

这是我的用户模型的代码:

class User extends AppModel {
public $name = 'User';
public $uses = 'users';
public $hasMany = array(
    'OModule' => array( //Owner of Modules
        'className' => 'Module',
        'foreignKey' => 'user_id',
        'order' => 'Module.created DESC'
        ));
public $hasAndBelongsToMany = array(
    'Module' => array(
       'className'              => 'Module',
               'joinTable'              => 'modules_users',
               'foreignKey'             => 'user_id',
               'associationForeignKey'  => 'module_id',
               'unique'                 => 'keepExisting',
    ));
} //Unnecessary code omitted    

值得一提的是,User和Module都有belongsTo和HABTM关系,所以User分别有别名Creator和OUser。在上面的代码中,findByEmail 试图使用 Creator 关系,但这给了我同样的错误。

我的问题是,如何正确调用 findByEmail() 方法?

4

1 回答 1

2

改变:

$user = $this->Module->User->findByEmail($email);

到:

$user = $this->User->findByEmail($email);

瞧!

原因:

不知何故,要么 1)Module 和 User 之间没有关系,2)关系中的错误,要么 3)您为它们中的一个或两个使用别名,因此使用 Module->User 是不正确的。

无论如何,您正在加载“用户”模型,因此没有理由通过模块模型来访问它 - 只需直接访问它(如上面的示例)。

于 2012-11-07T21:05:22.097 回答