Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

vagrantその19-45 cakephp入門をやってみる(複数Modelの連携その4)一対多対応 $hasMany

参考にさせて頂いたページ

複数Modelの連携(4/6):初心者のためのCakePHP2.0 プログラミング入門

アソシエーション: モデル同士を繋ぐ — CakePHP Cookbook 2.x ドキュメント

ホストマシン環境

ゲストマシン環境

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順に配列に格納されていた。

簡単に一対多のデータ紐付けができた。

すごい。

今回はここまで。