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

論理設計のアンチパターン

今回からは論理設計のアンチパターンについて。 やってはいけない設計のパターンですね。これはまわりがやっていると気づかずにやっている可能性があるのでしっかりメモしておきたいです。 Contents1 非 …

no image

Shift_JISの5C問題について 全角ハイフンでエスケープ

エンジニアであればだれもが頭を悩ませる文字コード。 私も初期のころはこれのせいでデータが入らないとかおかしくなるなんてことがさんざんありました。 今でも文字コードに遭遇することはあるんですが大体のパタ …

no image

call_user_funcについて

call_user_funcについて。 call_user_funcはメソッドを動的に呼ぶことができるメソッドの1つで、コールバック関数を使いたいときに使われます。JavaScriptでは比較的多いと …

no image

PHPの名前空間

PHPでも5.3以降はJavaのパッケージのように名前空間を使うことができます。 いままではライブラリやアプリケーションの開発者は、PHPに組み込まれている関数やクラス名や他の人が作ったライブラリとの …

no image

CakePHP3 Csvプラグイン

cakePHPでのCSVダウンロードプラグインを実装 Contents1 インストール2 プログラム3 注意点4 参考 インストール composer.jsonに下記のように書いてcomposer u …