2010年08月27日

paginateの設定

お願いします♪いいねとかつぶやいたりして下さい
 
pagnaterの設定がわけわからん。
ある程度のレベルになるとSQLクエリを書かないと行けないのか。

でも、書き方がわからん。
ということでまとめてみます。

DB情報


hideblog_users テーブル として id , name (1対)
hideblog_shikens テーブル として id user_id kamoku score (多)



で、目的別にコントローラーの書き方を。

ユーザーID順にとりあえず並べてみる


$this->paginate = array('User' =>
	array(
		'order' => array('User.id' => 'desc')
	)
);

$res = $this->paginate('User');


NG:試験のスコア順に並び変えるには、これでは動かない


$this->paginate = array('User' =>
	array(
		'order' => array('Shiken.score' => 'desc')
	)
);

$res = $this->paginate('User');


ユーザーの情報だけ、取得したい


//contain 編
$this->paginate = array('User' =>
    array(
        'order' => array('User.id' => 'desc'),
        'contain' => false
    )
);

//unbind model編
//第二引数の false が重要!これがないとバグる
$this->User->unbindModel(array('hasMany' => array('Shiken')),false);

$this->paginate = array('User' =>
    array(
        'order' => array('User.id' => 'desc')
    )
);


試験を受けていない人 (Shiken) テーブルにデータが無い人は表示させたくない


$this->paginate = array('User' =>
array(
    'joins' => array(
    	array('type' => 'inner', 'alias' => 'Shiken', 'table' => 'hideblog_shikens',
    		'conditions' => 'User.id = Shiken.user_id')
    	),
        
    'group' => array('User.id'),//これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
    )
);

//もっとわかりやすく書くと、こう!
// type を inner にするのが味噌
$this->paginate = array('User' =>
array(
	'joins' => array(
		array('type' => 'inner', 'alias' => 'Shiken(多 の モデル名)', 'table' => 'hideblog_shikens(prefix を含む DB名)',
		'conditions' => 'User.id = Shiken.user_id(メインモデルの モデル名.id , 多のモデル名. foreignKey名)')
	),
	'group' => array('User.id'),//メインモデルの モデル名.id これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
	)
);


まだまだ次の記事に続きますよ!


関連するタグ: PHP cakephp MYSQL
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ