0

datamapperで少し問題が発生しました。簡単な解決策があるかどうか知りたいのですが、この種のデータがあるとしましょう

グループテーブル

id   |   Name
1    |   admin
2    |   guest
3    |   editor
4    |   moderator

ベースコントローラーで、管理者ではないグループのみを表示するようにグローバルフィールドを設定しました

$this->groups_ = new Group();
$this->groups_->where('id >', 1)->get();

//so I can select the users that are not admin
$users = new User();
$users->where_related('group',$id,$this->groups_)->get();

ここで、コントローラーでグループをフィルター処理したいと思います。たとえば、編集者とゲスト(idは1〜4)のみを選択したいとします。だから私は最初の結果セットをフィルタリングしたいと思います...このようなもの

$this->groups_->where('id <',4)->get();

しかし、それは機能しません。adminを含む4未満のすべてのグループIDを返します。これを取得する正しい方法は何でしょうか?

4

2 に答える 2

0

考えられる解決策

たぶん、datamapperオブジェクトのクローンを作成することで可能な回避策を見つけました。私がやりたいのは、データベースを複数回クエリすることではありませんが、基本の結果セットを用意して、結果を絞り込みたいと思います。

だから私のベースコントローラーで私は次のようなことをします

$this->groups_ = new Group();
$this->groups_->where('id >', 1);//without getting the results

//so I can select the users that are not admin
$users = new User();
//here i'm getting the results from the clone
$users->where_related('group',$id,$this->groups_->get_clone()->get())->get();

そして、オブジェクトを「開いた」ままにしておくと、結果が得られずに、コントローラーで他の「クエリ」のベースとして使用できます...わかりました、これらは実際には最初のクエリの新しい条件です。

//now the query return the groups between 2, as I set in the base controller
//and 4, set in the child controller
$this->groups_->where('id <',4)->get();
于 2011-11-08T15:07:00.733 に答える
0

データマッパーは、オブジェクトまたはオブジェクトのグループを照会しません。データベースにクエリを実行します。したがって、2番目get()を実行すると、データベースに対して別のクエリを実行することになります。

これを行うことはできますが、追加のクエリになります。

$this->groups_->where('id >', 1)->where('id <', 4)->get();

$this->groups_または、phpで最初のクエリを実行した後でループして、そこでセットをフィルタリングし、配列として保存することもできます。

于 2011-11-02T14:15:10.580 に答える