テーブルのリレーション

2007/04/16 | cakePHP

久しぶりにcakePHPに戻る。近頃は一からシステムを組むなんてことに対して完全に億劫になっている。CMSツールとしてブログを使えば大抵のことができるから。記事管理ツールをわざわざ作らなくても、カスタマイズだけでできちゃうからね。
しかし、それでもだめな場合がやはりある。そういう場合でも極力楽をしたいから、そんなときにはcakePHPというわけだ。
しかし如何せん、まだ慣れてない。現状は簡単な仕組みを組むのもマニュアル片手にやっている状況だ(それでもすこぶる使い勝手がいい)。業務ではmojaviとcakePHPのフレームワーク二本立てだけれど、徐々にcakePHPに移行中、というわけだ。
さて本題。cakePHPでテーブルのリレーションを定義する方法。cakePHPでは極力定められたルールに則ってスクリプトを書くことで、定義ファイルも書かなくていいし、SQLも書かなくていい。直にSQLを書く必要がないから、その代わりにテーブルのリレーションをスクリプト側で定義したやらなければならない(ちょっとだけ面倒)。定義の仕方は4種類。ちなみにリレーションの定義の前に、関係するテーブルのモデルは別途個別に作成しておく必要がある。

■hasOneとbelongsTo
基本的に「主」と「従」のテーブル中のレコードが一対一で結ばれる場合、「主」から見て「従」へのリレーションを作成する場合にhasOne、「従」から見て「主」へのリレーションを作成する場合にbelongsToと使う(厳密には違うような気がするけど大体これでいいと思う)。例えばユーザIDのテーブルと、そのユーザのプロパティを格納したテーブルであれば、ユーザIDのテーブルを「主」、プロパティのテーブルを「従」とみなすことができる。

■hasMany
こちらは「親」と「子」と表現するほうがよさそう。「親」テーブルのレコード1つに対して「子」テーブルの複数のレコードが該当するような感じ。1対多の関係になっているタイプ。

■hasAndBelongsToMany
これはちょっと複雑。例えば「人間」と「検索エンジン」というテーブルの組み合わせを考える。Aという人間はgoogleとyahooを使う。Bという人間はyahooとaskを使う。こういう具合に多対多のリレーションを考えるとき、間にもう一つテーブルを入れればわかりやすい。つまり関係を表すデータのみをもつテーブルだ。hasAndBelongsToManyはこういうテーブルをあらわすことに使う。

ここの使い方はまた別途メモする(かもしれない)。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net