2012年9月4日火曜日

cakephp2.2 find

○新しいアプリは新しい道具で作る

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

コメントを投稿