cakephpはfindを直感的に書けて、いいですね(*^_^*)
メニュー
・(基本形)findのパラメータの書き方 ・(応用例)Menusコントローラの中で、Favoriteモデルのオブジェクトを読み込んでViewに渡す ・(応用例)conditions 'or' 条件
■ (基本形)findのパラメータの書き方
$this->モデル名->find('all/list/count/', $parameter);
cakephp2.xマニュアルのfindはこちら
array('Model.field' => $thisValue), //array of conditions 'recursive' => 1, //int 'fields' => array('Model.field1', 'DISTINCT Model.field2'), //array of field names 'order' => array('Model.created', 'Model.field3 DESC'), //string or array defining order 'group' => array('Model.field'), //fields to GROUP BY 'limit' => n, //int 'page' => n, //int 'offset' => n, //int 'callbacks' => true //other possible values are false, 'before', 'after' )
recursive:アソシエーションの深さ。-1:自分だけ、0:自分と次まで、1:その次まで(ざっくり) fields:取得するフィールドの指定。 おお! DISTINCTは、ここに書けばいいんだ!!! order:arrayで並べて書けばいい。OR条件の場合は、下の記述を参照。 group:group byは、ここに書きます。 limit:paginateで表示するデータ数です。
(応用例)Menusコントローラの中で、Favoriteモデルのオブジェクトを読み込んでViewに渡す
(1)【準備】Menusコントローラの上部で、$usesに'Favarite’モデルを使う設定
class MenusController extends AppController { var $uses = array('Menu','Favorite', ・・・・); ↑ $usesに'Favarite'モデルを追加
(2)【実行】コントローラのfunctionの中でfindする
1)App::importでFavoriteモデルをimportして
2)$favaritesオブジェクトをnewして準備しておきます
3)findで$favaritesに読み込み、このオブジェクトをsetしてViewに渡します
(実行したいfunctionの中で) App::import('Model', 'Favorite'); $favorites = new Favorite; $parameter = array( 'conditions' => array('Favorite.valid <>' => 1, 'Favorite.show <>' =>0 ), 'limit' => 10, 'order' => array('modified' => 'desc'), ); $favorites = $this->Favorite->find('all', $parameter); $this->set('favorites',$favorites);
conditionsで'or' 条件を使う
・'conditions'を 'or'のarrayで並べればOKです。(例)ログインユーザで(and条件)、
favarite(好きなもの)が 'りんご' か(or条件) 'みかん' のデータを抽出
(実行したいfunctionの中で) App::import('Model', 'Favorite'); $favorites = new Favorite; $parameter = array( 'conditions' => array('Favorite.user_id' => $uid, 'OR' => array('Favorite.caption' => 'リンゴ'), array('Favarite.captiion' => 'みかん') ), 'limit' => 10, 'order' => array('modified' => 'desc'), ); $favorites = $this->Favorite->find('all', $parameter); $this->set('favorites',$favorites);
0 件のコメント:
コメントを投稿