skillup

技術ブログ

Database PHP

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

投稿日:2016年2月29日 更新日:

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

基本から。

基本的なリレーション

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

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

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

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://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html

[CakePHP] belongsTo と hasMany の関係図

CakePHP 動的アソシエーション bindModel と、$reset パラメーターの落とし穴

-Database, PHP
-, ,

執筆者:


comment

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

関連記事

no image

MySQLのロックに関して+サブクエリ内のupdate

MySQLのロックに関して。 データベースではデータの整合性を保つために読み書きを一時的に制限する仕組みがあります。(データベースだけではないですが・・・) 大きく分けると共有ロック(書き込みは当然だ …

no image

Cakeの共通処理

CakePHPだけに限りませんが、フレームワークの場合、オブジェクト指向の特徴を理解して、全ページに共通な処理などは個々のコントローラーに書くのではなく、もっと抽象度の高いクラスに書いたほうが保守性が …

no image

PECLに関して

PHPのライブラリを入れようとするとたまに出てくるPECLに関して。 最近でもメールパーサーを入れた時に出ましたね。 [PHP]pecl,phpize,extensionという単語を見て頭痛がするあな …

no image

SQLServerについて

今までDB環境といえば、95%以上がMySQLで、残り5%がPostgreSQLでしたが、SQLServerに触ることに・・・ 名前しか聞いたことなかったのですが、ここ1か月ぐらいで少し調べたことなど …

no image

xdebugに関して

PHPでお手軽にできるdebugツールとしてxdebugを。 Contents1 利点2 インストール3 参考リンク 利点 var_dumpの結果が非常に見やすい(単純ですがこれが一番大きい理由です。 …

アーカイブ