スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



  

cakePHPでアソシエーションを使用せずに複数テーブルの情報を取得する方法

cakePHPで複数テーブルにまたがった値を取得する場合にはアソシエーション機能を使うことができる。
クラスにアソシエーションを指定しておけば、テーブルの情報を取得する際に自動的に関連するテーブルの情報を拾ってきてくれる便利な機能だが、不必要な情報まで拾ってきてしまうため、こまめに指定しなければDBへの負荷がかかってしまう。
一時的にアソシエーションを削除、作成することもできるが、アソシエーションを指定しなくても複数テーブルにまたがる情報を取得する方法があるので以下にまとめる。この方法をとれば、必要な情報のみを取得できるため負荷の軽減が見込める。

members(個人情報テーブル)
idnameattribute_id
1太郎 1
2花子2
3丸雄4

attributes(属性テーブル)
idname
1小学生
2中学生
3高校生

上記のようなテーブルがあった場合、membersテーブルに対応するMemberクラスのメソッドで以下のように指定する。

$conditions = array(
 "join" => array(
  array(
   "type" => "INNER",
   "table" => "attributes",
   "alias" => "Attribute",
   "conditions" => array(
    "Member.attribute_id = Attribute.id",
   ),
  ),
 ),
);
$this->find("list", $conditions);


この場合、attribute_idで属性テーブルと連結しているが、
typeにINNERを指定しているため、内部的にはINNER JOINを使用した結合が行われている。

結果表
Member__idMember__nameMember__attribute_idAttribute__idAttribute__name
1太郎 11小学生
2花子22中学生

typeをLEFTで指定するとLEFT JOINを使用した結合が行われる。
Member__idMember__nameMember__attribute_idAttribute__idAttribute__name
1太郎 11小学生
2花子22中学生
2丸雄4NULLNULL



関連記事
スポンサーサイト



  

テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

検索フォーム
プロフィール

サトリヒロシ

Author:サトリヒロシ
ビジネスを重視した企画を支援したいエンジニアが、何かを書こうとするブログです。

サトリ潜伏先
サトリ倉庫

WEB関連の技術で調査リクエストがあればご連絡ください。

カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
カテゴリ
最新記事
最新コメント
最新トラックバック
月別アーカイブ
RSSリンクの表示
リンク
QRコード
QRコード
FC2カウンター
スポンサードリンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。