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

フレームワークの基本的なアーキテクチャについて

フレームワークで大事なのは基本的な文法ではなく、構造の理解だと思います。 PHPですとCake,Laravel,Synfonyなどありますが、1つのものでしっかりと理解できていれば他のものもそれほど問 …

no image

cakeでのUtilityメソッド

cakeではControllerから呼ぶメソッドはComponent,ModelはBehavior、ViewはHelperに記述するのが一般的です。 ところが、プログラムを書いているとUtility系 …

no image

phpmdによるコードチェック

現在のプロジェクトですが、コードレビューなどをされる環境にはないため、一人で書いていると自然と規約とずれた書き方になっていることもあります。 規約通りに書こう、書こうと思っていてもなかなかその通りに書 …

no image

PHPでのデバッグ

基本的なことですが、PHPのdebugについておさらいを。 Contents1 一般的なデバッグツール1.1 var_dump1.2 xdebug1.3 フレームワークのdebugツール1.4 dd1 …

no image

phpenv+php-build 複数のPHPのversionを使い分け

使っているサーバーで別バージョンのphp(7.2.0)を使いたかったのでphpenv&php-buildをインストール。 Contents1 phpenvのインストール2 php instal …

アーカイブ