参考にさせて頂いたページ
複数Modelの連携(4/6):初心者のためのCakePHP2.0 プログラミング入門
アソシエーション: モデル同士を繋ぐ — CakePHP Cookbook 2.x ドキュメント
ホストマシン環境
ゲストマシン環境
- PHP 5.3.3
- CentOS release 6.6 (Final)
- cakephp2.5.6
- mysql Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using EditLine wrapper
- Apache/2.2.15 (Unix)
Model/MySampleData.phpの編集と記述内容
前回書いたコードのhasOneをhasManyに変更して、以下の通り。
<?php
App::uses('AppModel', 'Model');
class MySampleData extends AppModel {
public $hasMany = "GuestBook";
}
guest_booksテーブルに1レコード追加した
id5に2レコード分のデータが紐付くように追加して、my_sample_data_idが5,6,7,5と以下のようにした。
id | content | my_sample_data_id |
---|---|---|
1 | content_1 | 5 |
2 | content_2 | 6 |
3 | content_3 | 7 |
4 | content_4 | 5 |
hasManyアソシエーションについての詳細
hasManyアソシエーションの配列に指定できるキーなど、詳細についてはアソシエーション: モデル同士を繋ぐ — CakePHP Cookbook 2.x ドキュメントを参照すると良さそう。
ブラウザでアクセスしてみた
前回と同じくhttp://192.168.33.10/cakephp/my_sample_datas/hogeにアクセスしてみた結果として、print_rで以下のような出力がされた。
Array
(
[0] => Array
(
[MySampleData] => Array
(
[id] => 1
[name] => name1
[mail] => mail1
[tel] => tel1
)
[GuestBook] => Array
(
)
)
[1] => Array
(
[MySampleData] => Array
(
[id] => 2
[name] => name2
[mail] => mail2
[tel] => tel2
)
[GuestBook] => Array
(
)
)
[2] => Array
(
[MySampleData] => Array
(
[id] => 3
[name] => name3
[mail] => mail3
[tel] => tel3
)
[GuestBook] => Array
(
)
)
[3] => Array
(
[MySampleData] => Array
(
[id] => 4
[name] => name4
[mail] => mail4
[tel] => tel4
)
[GuestBook] => Array
(
)
)
[4] => Array
(
[MySampleData] => Array
(
[id] => 5
[name] => name5
[mail] => mail5
[tel] => tel5
)
[GuestBook] => Array
(
[0] => Array
(
[id] => 1
[content] => content_1
[my_sample_data_id] => 5
)
[1] => Array
(
[id] => 4
[content] => content_4
[my_sample_data_id] => 5
)
)
)
[5] => Array
(
[MySampleData] => Array
(
[id] => 6
[name] => name6
[mail] => mail6
[tel] => tel6
)
[GuestBook] => Array
(
[0] => Array
(
[id] => 2
[content] => content_2
[my_sample_data_id] => 6
)
)
)
[6] => Array
(
[MySampleData] => Array
(
[id] => 7
[name] => name7
[mail] => mail7
[tel] => tel7
)
[GuestBook] => Array
(
[0] => Array
(
[id] => 3
[content] => content_3
[my_sample_data_id] => 7
)
)
)
[7] => Array
(
[MySampleData] => Array
(
[id] => 9
[name] => name9
[mail] => mail9
[tel] => tel9
)
[GuestBook] => Array
(
)
)
[8] => Array
(
[MySampleData] => Array
(
[id] => 10
[name] => name10
[mail] => mail10
[tel] => tel10
)
[GuestBook] => Array
(
)
)
)
この記事のまとめ
前回の記事と比べて、ソースコードで変更された箇所といえばhasOneをhasManyに変更しただけ。
hasManyのオプション設定を略している場合、ソートはされずにid順に配列に格納されていた。
簡単に一対多のデータ紐付けができた。
すごい。
今回はここまで。