複数Modelの連携 (5/6)
作成:2011-12-19 08:07
更新:2011-12-19 08:12
更新:2011-12-19 08:12
■LEFT JOINを行う「belongsTo」
hasManyの一対多対応は、「1」の側のデータに、関連する「多」側のデータを結びつけます。
サンプルで言えば、MySampleData側でデータを取り出すと、そのデータに関連付けられたGuestBook側のデータが一書に取り出される、という形です。あくまでMySampleDataが主であり、GuestBookは従です。
これを逆向きに関連付けるのが、belongsToです。すなわち、従であった「多」側から、それが結び付けられている主である「一」側のデータを取り出すためのものです。MySQLなどで「LEFT JOIN」と呼ばれるもので、hasOneやhasManyとは逆向きに結びつきがたぐられます。
このbelongsToは、一対多の「多」側(つまり主Modelではなく従Model側)に用意します。サンプルでは、GuestBookクラス側に用意をします。下のリスト欄に、簡単な利用例をあげておきました。このように、
実際に、guest_booksにブラウザからアクセスをしてみてください。データの一覧が表示されますが、その「My Sample Data」という欄(my_sample_data_idの項目)には、ID番号ではなく、関連付けられたMySampleDataの名前が表示されています。GuestBookには、名前の情報などは入っていませんでした。belongsToにより、関連付けられているMySampleDataの項目から名前をピックアップして表示していることがわかるでしょう。
サンプルで言えば、MySampleData側でデータを取り出すと、そのデータに関連付けられたGuestBook側のデータが一書に取り出される、という形です。あくまでMySampleDataが主であり、GuestBookは従です。
これを逆向きに関連付けるのが、belongsToです。すなわち、従であった「多」側から、それが結び付けられている主である「一」側のデータを取り出すためのものです。MySQLなどで「LEFT JOIN」と呼ばれるもので、hasOneやhasManyとは逆向きに結びつきがたぐられます。
このbelongsToは、一対多の「多」側(つまり主Modelではなく従Model側)に用意します。サンプルでは、GuestBookクラス側に用意をします。下のリスト欄に、簡単な利用例をあげておきました。このように、
public $belongsTo = "関連するModel名;という形で$belongsTo変数を用意するだけで関連付けが行われるようになります。
実際に、guest_booksにブラウザからアクセスをしてみてください。データの一覧が表示されますが、その「My Sample Data」という欄(my_sample_data_idの項目)には、ID番号ではなく、関連付けられたMySampleDataの名前が表示されています。GuestBookには、名前の情報などは入っていませんでした。belongsToにより、関連付けられているMySampleDataの項目から名前をピックアップして表示していることがわかるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※GuestBook.php class GuestBook extends AppModel { public $belongsTo = "MySampleData"; }
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る