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

joinとeager loading

フレームワークでデータをORMがらみでjoinするときのネタ。 自分の場合はLaravel。他のフレームワークでも考え方は通じるものあるかと・・ Contents1 通常のjoin2 ループの中で取得 …

no image

サロゲートキーに関して

テーブル設計に関してのメモ。 テーブルを作る時にid int not null auto_increment primary keyを自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノ …

no image

PHPでの切り上げ誤差問題

PHPを初めて、4年近くたちますがいまだに知らんことが多いですね(爆) 本日は、

になるという非常にビックリな仕様に遭遇・・・ なにや …

no image

SQL基礎 手続き型言語と集合思考の言語

どんな仕事でもそうだと思いますが、長年惰性で使っていると日常の作業はなんとかできてるけど、実は深く理解していない&効率のいいやり方を知らない、ということが結構あります。 私の場合、ちょっと前にCSSを …

no image

MySQLでのlocalhostと127.0.0.1の違い

たまにMySQLでローカルのホストに接続する時に、localhostで接続するときと127.0.0.1で接続するときで挙動が違う(片方だとエラーになり、もう片方だとエラーにならない)などがあるのでちょ …