我一直在我的一个控制器的索引函数中,在非对象的"错误"错误上呼叫"呼叫"。这是代码:
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
值得一提的是,用户和模块既有属于属于的关系,又具有HABTM关系,因此用户分别具有Aliases Creator和Ouser。在上面的代码中,FindbyEmail试图使用创建者的关系,但这给了我同样的错误。
我的问题是,我该如何调用findbyemail()方法没有错误?
更改:
$user = $this->Module->User->findByEmail($email);
to:
$user = $this->User->findByEmail($email);
voila!
原因:
某种程度上,要么有1)模块和用户之间没有关系,2)关系中的错误,或3)您对任何一个或两个都使用别名,以便使用模块 ->用户不正确。
无论如何,您都在加载"用户"模型,因此没有理由通过模块模型访问它 - 只需直接访问它(如上面的示例)。