1

$this->userモデルのオブジェクトがありますUser。このオブジェクトは$this->Auth->user、私のアプリコントローラーで次のように設定されます:

$this->user = ClassRegistry::init('User');
$this->user->set($this->Auth->user);

魅力のように機能します。コントローラーで $this->user を print_r すると、次のようになります。

User Object ( [validate] => Array ( blah blah blah

典型的なオブジェクト。にGroup属するモデルがありUser、ユーザーには多くのグループがあります。これらの変数は、モデルで適切に設定されています。ログインしているこの特定のユーザーのすべてのグループを検索したいので、これを試しました:

$groups = $this->user->Group->find('list', array('fields'=>array('id', 'group_name')))

重要なのは、$this->user を使用して、$this->user の owner_id に基づいてグループ クエリを自動的にフィルター処理することです。ユーザーを表す特定のオブジェクトを取得し、そのユーザーに基づいてグループ クエリを実行すると、関連するグループのみが返されます。

問題は、 $groups には、現在のユーザーからのみ必要なエントリではなく、Groups テーブルのすべてのエントリが含まれていることです。"conditions"=>"user_id"=$this->Auth->user('id')モデルチェーンを介して使用しているユーザーを既に指定しているため、find 関数にパラメーターを追加する必要がある理由がわかりません。

これが機能しない理由はありますか?それが実行する sql ステートメントは、グループ WHERE 1 = 1 に対する単純な SELECT です (したがって、まったくフィルタリングされません)。

4

1 に答える 1

0

いいえ、オブジェクト User は実際にはオブジェクトというよりもクラスのように機能します。Cake は Active Record パターンを完全には実装していないと言えます (Cake 3.0 で修正されるかもしれませんが、確かではありません)。そうです、検索の条件を設定する必要があります。そして、設定する必要はありません($this->Auth->user);

あなたはおそらく Cake にあまり慣れていないでしょう: Cake では、Model オブジェクトをインスタンス化する必要はほとんどありません。これらは、指定した現在のコントローラーとモデルの関係に基づいて作成されます。

于 2011-08-26T19:15:09.673 に答える