ある程度のレベルになると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 これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
)
);
まだまだ次の記事に続きますよ!







こんにちわ。 preg_replace_callba…