CakePHP で join をやりたかったメモ。
※この記事は 2010年に書かれた古い記事です。
「CakePHP 複数テーブル」でぐぐると3つ、ちょっとずつ違う話が出てくる。
1. コントローラの中で複数のモデルを使いたい。
コントローラの冒頭で
2. モデルを結び付けたい。
hasOne とかそういうもの。
関連: モデルを結びつける :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook
3. join を使いたい。
使えるのは inner join と left join。
find で渡す条件の配列に joins という名前で配列を渡す。
テーブルをひとつだけ join したい場合、$joins = array(array(条件)); のようになるので、
うっかりしていると array をひとつ忘れてはまる。
参考
ZiSTA Cake: 'joins'で明示的にテーブルをJOINする
[cakephp]cakephp1.2で明示的にJOINさせるやり方
CakePHPのpaginateでJOIN [CakePHP] | Web&MUSICブログ QUALL
「CakePHP 複数テーブル」でぐぐると3つ、ちょっとずつ違う話が出てくる。
1. コントローラの中で複数のモデルを使いたい。
コントローラの冒頭で
var $uses = array("Table1", "Table2", ...);$components、$helpers、$uses :: コントローラの属性 :: コントローラ :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook
2. モデルを結び付けたい。
hasOne とかそういうもの。
関連: モデルを結びつける :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook
3. join を使いたい。
使えるのは inner join と left join。
find で渡す条件の配列に joins という名前で配列を渡す。
テーブルをひとつだけ join したい場合、$joins = array(array(条件)); のようになるので、
うっかりしていると array をひとつ忘れてはまる。
$joins = array(
array(
'type' => 'inner', // もしくは left
'table' => 'fuga_table',
'alias' => 'Fuga',
'conditions' => array(
'Fuga.id = Hoge.id',
),
),
array(
// 複数のテーブルを joinできる
),
);
$param = array('joins' =>$joins , 'conditions'=>条件, 'order'=>並び順, ...);
$this->Hoge->find('all', $param);
参考
ZiSTA Cake: 'joins'で明示的にテーブルをJOINする
[cakephp]cakephp1.2で明示的にJOINさせるやり方
CakePHPのpaginateでJOIN [CakePHP] | Web&MUSICブログ QUALL
by tokage-shippo
| 2010-07-15 19:06
| プログラミング