1

コントローラーの 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)モジュールとユーザーの間に関係がない、2)関係に誤りがある、または3)モジュール->ユーザーの使用が正しくないようにどちらかまたは両方のエイリアスを使用している。

とにかく「ユーザー」モデルをロードしているので、モジュールモデルにアクセスする理由はありません。直接アクセスするだけです(上記の例のように)。

于 2012-11-07T21:05:22.097 に答える