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 件のコメント:
コメントを投稿