複数Modelの連携 (6/6)
作成:2011-12-19 08:09
更新:2011-12-19 08:09
更新:2011-12-19 08:09
■関連付けられたデータの構造
では、これらの関連付けを設定することにより、取り出されるデータはどのように変化しているのでしょうか。得られたデータをprint_rして表示してみることにしましょう。
例として、hasManyでのModel連携を行った場合のデータ構造を見てみることにしましょう。すると、print_rで表示されるデータは以下のような形になっているでしょう。
このように、Modelの関連付けがされると、関連付けられた各Modelのインスタンスが連想配列にまとめられた状態でデータが保管されるようになるのです。これはhasOneでもhasManyでもbelongsToでも基本的には変わりありません。
関連付けを行わない場合と比べ、データの階層が1段深くなるので、データの扱いには注意が必要です。が、構造さえわかれば、各データは非常にすっきりと整理されているので利用はかなり簡単そうですね。
例として、hasManyでのModel連携を行った場合のデータ構造を見てみることにしましょう。すると、print_rで表示されるデータは以下のような形になっているでしょう。
Array見ればわかるように、各データは連想配列になっており、その中にMySampleDataとGuestBookの各キーが用意されています。そしてそれぞれの値に更に配列が用意され、その中にMySampleDataのデータと、そのデータに関連付けられているGuestBookのデータがまとめられています。
(
[0] => Array
(
[MySampleData] => Array
(
[id] => 1
[name] => 名前
[mail] => メールアドレス
[tel] => 電話番号
)
[GuestBook] => Array
(
[0] => Array
(
[id] => 1
[content] => コンテンツのテキスト
[my_sample_data_id] => 1
)
……以下略……
このように、Modelの関連付けがされると、関連付けられた各Modelのインスタンスが連想配列にまとめられた状態でデータが保管されるようになるのです。これはhasOneでもhasManyでもbelongsToでも基本的には変わりありません。
関連付けを行わない場合と比べ、データの階層が1段深くなるので、データの扱いには注意が必要です。が、構造さえわかれば、各データは非常にすっきりと整理されているので利用はかなり簡単そうですね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MySampleDatasController.php class MySampleDatasController extends AppController { public function index() { $datas = $this -> MySampleData -> find('all'); $this -> set('datas', $datas); } } ※index.ctp <h1>Index Page</h1> <p>MySampleData Index View.</p> <pre> <?php print_r($datas); ?> </pre>
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る