複数Modelの連携 (1/6)
作成:2011-12-19 07:54
更新:2011-12-19 07:54
更新:2011-12-19 07:54
■連動するテーブルを用意する
複数のテーブルを連携して動かすには、まずテーブルを用意して置かなければいけません。今回は、簡単なゲストブックを作成してみましょう。IDとコンテンツと他に1つ項目があるだけの非常にシンプルなものです。
下のリスト欄に、テーブル作成のSQL文を掲載しておきます。ここで用意されている項目は以下のようなものです。
id――プライマリキーとなるものです。これにより各データを識別します。
content――テキストを保管するものです。簡単なメッセージを保管します。
my_sample_data_id――これが今回のポイントとなるものです。関連するmy_sample_data項目のIDを保管します。
今回のテーブルでは、簡単なメッセージの投稿を保管します。投稿データには、その投稿をしたユーザーの情報として、MySampleDataから必要な情報を取り出そう、というわけです。
こうした複数のModelを連携する場合、このmy_sample_data_idのように「関連するModelにあるオブジェクトのプライマリキー」を保管するための項目を用意する必要があります。こうすることで、そのデータと別テーブルの特定のデータを関連付けられるのです。
こうしたModelの関連付けを示す項目は、「関連するテーブル名_id」というように、テーブル名の後に「_id」をつけた名前で用意されます。そしてここに、関連するデータのプライマリキーが設定されるのです。
この関連付けするための項目は、GuestBookには必要ですが、MySampleDataには必要ありません。MySampleDataは、GuestBookのデータがないと表示や編集が行えないわけではないのですから。
下のリスト欄に、テーブル作成のSQL文を掲載しておきます。ここで用意されている項目は以下のようなものです。
id――プライマリキーとなるものです。これにより各データを識別します。
content――テキストを保管するものです。簡単なメッセージを保管します。
my_sample_data_id――これが今回のポイントとなるものです。関連するmy_sample_data項目のIDを保管します。
今回のテーブルでは、簡単なメッセージの投稿を保管します。投稿データには、その投稿をしたユーザーの情報として、MySampleDataから必要な情報を取り出そう、というわけです。
こうした複数のModelを連携する場合、このmy_sample_data_idのように「関連するModelにあるオブジェクトのプライマリキー」を保管するための項目を用意する必要があります。こうすることで、そのデータと別テーブルの特定のデータを関連付けられるのです。
こうしたModelの関連付けを示す項目は、「関連するテーブル名_id」というように、テーブル名の後に「_id」をつけた名前で用意されます。そしてここに、関連するデータのプライマリキーが設定されるのです。
この関連付けするための項目は、GuestBookには必要ですが、MySampleDataには必要ありません。MySampleDataは、GuestBookのデータがないと表示や編集が行えないわけではないのですから。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
CREATE TABLE IF NOT EXISTS `guest_books` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `my_sample_data_id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る