skillup

技術ブログ

Database PHP

Cakeでのリレーションについて

投稿日:

いまさらながらCakeのリレーションについての復習。

基本から。

基本的なリレーション

下記のようなテーブル構成になっていたとします。

ある予約管理システムを作っており、必要な情報は「誰がどこにいつとまるか」の情報です。

誰=人をUser、場所をRoom、そして予約データ自体をReserveで管理します。

relation

1対N

UserやRoomから見た場合、reserveは1対Nになります。

Userの1レコードを取得すれば複数の予約レコードが取得できるからです。(Room)に関しても同様。

もしUserのレコードを取得したときに、reserveも一緒に紐づけて取得したい場合は、Userモデルに

public $hasMany = array(‘Reserve’)などと書きます。

N対1

逆にReserveから見るとUserやRoomは逆の関係になるのでN対1です。

Reserveのレコードを取得したときに、UserやRoomも取得したい場合は、Reserveに

public $belongsTo = array(‘User’,’Room’)と書きます。

動的な紐づけ

Cakeで上記のような設定をしておくと、自動的にレコードを紐づけて取得することができます。しかし常にレコードが紐づいているとスピードが劣化するなどの問題もあり、時には外したくなることもあるでしょう。

そのような場合は、下記のように書くことで一時的にJOINをはずすことができます。もちろんいつもは紐づけていないけれども動的に紐づけを行いたい、などもすることができます。

参考リンク

http://www.happytrap.jp/blogs/2009/10/11/1502/

http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html

http://ivystar.jp/programming/php/cakephp-php-programming/cakephp-belongsto-%E3%81%A8-hasmeny-%E3%81%AE%E9%96%A2%E4%BF%82%E5%9B%B3/

http://hijiriworld.com/web/cakephp-bindmodel/

-Database, PHP
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

テンプレートエンジンTwigについて

SmartyにかわるテンプレートエンジンとしてTwig(ツィッグ)を勉強中。 といってもテンプレートエンジンなので基本的なことはほとんど一緒っぽいですが。 Contents1 インストール2 基本的な …

no image

正規表現(/を含むとき)

PHPの正規表現ですが、判定する文字列の中にスラッシュが入っている時の処理はデリミタを//ではなく{}でくくればOKです。 例えば数字2桁/数字1桁をチェックしたいとき [crayon-5bc6108 …

no image

NULLについて

「達人に学ぶSQL徹底指南書」を読み進めていきましたがNULLについていろいろ書いてあるのでメモリます。 Contents1 NULLには未知と適用不能の2パターンがある2 = NULL が使えず I …

no image

underbarphpについて+配列処理頻出パターン

配列系の処理を関数型で行いたいときにJavaだとラムダ式、javaScriptだとunderscore.jsがあります。 PHPではできないものか・・といろいろと探していたところunderbar.ph …

no image

cakePHPでのマイグレーション

開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。 そ …