0

私は、ユーザーとさまざまな可能な役割(管理者、ライター、モデレーター)を持っているcakephp2プロジェクトを持っています。各役割には独自のモデルがあります。ユーザーがログインすると、ユーザーがロールに属しているかどうかを確認し、そのロールのコントローラーにリダイレクトします。しかし、ユーザーに関連付けられたモデルをロードできないようです。

$user = $this->Auth->user();
if($user['role'] == 'writer'){
  $writer = $this->Writer->findByUser_id($user['id']);
  $writerID = $writer['id'];
  # redirect and such here
}

Cakeは、3行目に次のようなエラーを出します。

Error: Call to a member function findByUser_id() on a non-object    

ユーザーモデルには次のものがあります

public $hasOne = 'Writer';

ライターモデルではこれ

public $belongsTo = 'User';

これは非常に単純なはずですが、Writerモデルをコントローラーに取り込む方法がわからないようです。何か案は?

4

1 に答える 1

2

コントローラでその検索を使用している場合は、チェーンを使用する必要があります

$this->User->Writer->findByUserId($id);

それがモデルにある場合は、チェーンで問題ありません。あなたが気づいたかもしれない他のことは「テーブルのuser_idに適用されるUserIdです。

さらに、再帰的または包含可能を使用して、ライターとモデレーターから関連する結果を取得できます

ユーザーのコントローラーにある場合

$this->User->Behaviors->attach('Containable');

$this->User->contain(array('Writer'));
//do ur find

ベストプラクティスとして、これらの検索結果をモデルレイヤーに保持してみてください。モデルレイヤーでは、チェーンからモデルの名前をスキップします。

于 2012-09-22T02:08:09.210 に答える