複数Modelの連携 (4/6)
作成:2011-12-19 08:04
更新:2011-12-19 08:04
更新:2011-12-19 08:04
■一対多対応の「hasMany」
このhasOneは、常に1つのデータに別のModelの1つのデータが関連付けられます。同時に複数の項目を関連付けることはできません。しかし、1つのデータに、別のModelの多数のデータが関連付けられることはよくあります。
例えば、今回の例では、2つのモデルの役割を以下のように考えるとしましょう。
MySampleData――各ユーザーの情報の管理
GuestBook――投稿したメッセージの管理
GuestBookには、投稿した人の情報をMySampleDataから引っ張ってきて設定するわけですね。そうすると、1つのMySampleDataにいくつものGuestBookのデータが関連付けられることになります。それぞれのユーザーは、いくつもメッセージを投稿をできるのですから。
こうした1つのデータに多数のでーたが関連付けられる状態を「一対多対応」といいます。これを実現するのが「hasMany」という設定です。下のリスト欄に、MySampleDataの修正例を挙げておきました。hasManyは、Modelクラスに、
例えば、今回の例では、2つのモデルの役割を以下のように考えるとしましょう。
MySampleData――各ユーザーの情報の管理
GuestBook――投稿したメッセージの管理
GuestBookには、投稿した人の情報をMySampleDataから引っ張ってきて設定するわけですね。そうすると、1つのMySampleDataにいくつものGuestBookのデータが関連付けられることになります。それぞれのユーザーは、いくつもメッセージを投稿をできるのですから。
こうした1つのデータに多数のでーたが関連付けられる状態を「一対多対応」といいます。これを実現するのが「hasMany」という設定です。下のリスト欄に、MySampleDataの修正例を挙げておきました。hasManyは、Modelクラスに、
public $hasMany = "関連するModel名";という形で変数を用意することで設定します。先ほどと同じようにMySampleDataの項目の「View」ボタンを押して内容を表示してみてください。関連するGuestBookが複数あった場合、それらがすべて表示されます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MySampleData.php class MySampleData extends AppModel { public $hasMany = "GuestBook"; }
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る