0

CakePHP の関係/エイリアスに奇妙な問題があり、データに正しくアクセスできなくなりました。

私は持っている:

  • ユーザー hasMany CreatorModule (モジュールの別名)
  • ユーザー HABTM LearnerModule (モジュールのエイリアス)
  • モジュール属している作成者 (ユーザーのエイリアス)
  • モジュール HABTM Learner (ユーザーの別名)

そして、私は電話しようとしています:

$id = $this->Module->User->findByEmail($email);
$modules = $this->Module->findByUserId($id['User']['id']);

生成されるクエリが正しくありません。テーブル エイリアスが間違っています。上記のどれが原因かはわかりませんが、次のようになります。

SELECT
    `Creator`.`id`,
    `Creator`.`email`,
    `Creator`.`organization`,
    `Creator`.`name`,
    `Creator`.`password`,
    `Creator`.`verified`,
    `Creator`.`vcode`
FROM
    `snurpdco_cake`.`users` AS `Creator` 
WHERE
    `User`.`email` = 'foo@example.com' # <--
LIMIT 1

エラーは、CakePHPが WHERE 句の 'User' を Creator に変更する必要があるが、エイリアスを使用しても変更しないということであることがわかりました。このクエリを正しく完了するにはどうすればよいですか。

さらに、関連する問題として、エイリアスを定義したため、モデル呼び出しなどで User を使用できなくなっていることがわかりました。これを回避する方法はありますか?

編集: 要求に応じて、エイリアスを定義するモデル コードを次に示します。

class User extends AppModel {
public $name = 'User';
public $uses = 'users';
public $hasMany = array(
    'OwnedModule' => array(
        'className' => 'Module',
        'foreignKey' => 'user_id',
        'dependent' =>  true
        ));
public $hasAndBelongsToMany = array(
    'LearnerModule' => array( 
       'className'              => 'Module',
       'joinTable'              => 'modules_users',
       'foreignKey'             => 'user_id',
       'associationForeignKey'  => 'module_id',
       'unique'                 => 'keepExisting',
    ));
//The rest of the Model
} 
//Different file, condensed here for spacing 
class Module extends AppModel {
public $name = 'Module';
public $belongsTo = array(
    'Creator' => array(
        'className' => 'User'));    
public $hasAndBelongsToMany = array(
    'Learner' => array(
       'className'              => 'User',
       'joinTable'              => 'modules_users',
       'foreignKey'             => 'module_id',
       'associationForeignKey'  => 'user_id',
       'unique'                 => 'keepExisting',
    ));
//The rest of the Model
}
4

1 に答える 1

0

試す

$id = $this->Module->Creator->find('first', 
          array('conditions' => array('Creator.email' => $email)
      );
$modules = $this->Module->findByCreatorId($id['User']['id']);
于 2013-01-22T02:19:18.617 に答える