チュートリアル - ブックマークに評価をつける
ブックマークの管理ができるようになりましたので、次はブックマークを評価できるよう拡張します。
さきほどと同じ手順で evaluations テーブルに関するモデルとコントローラを作成してください。
CREATE TABLE evaluations ( id INTEGER NOT NULL AUTO_INCREMENT, bookmark_id INTEGER NOT NULL, name VARCHAR(30) NOT NULL, comment VARCHAR(100) NOT NULL, PRIMARY KEY (id) );
scaffolding の状態でも評価の登録は可能ですが、現段階ではブックマークとの関連がありません。ブックマークと評価を関連づけるには CakePHP のアソシエーションという機能を使用します。
アソシエーションに関しましてはリレーションを参照してください。単語は違いますが意味は同じです。もう少し言うとデータベースの視点から見るとリレーション、 CakePHP の視点から見るとアソシエーションと呼ばれるようです。
ブックマークと評価の関係は、ひとつのブックマークが親となり、複数の評価がそれに属しています。これを CakePHP 風に解釈すると、ブックマークは評価を hasMany 、評価はブックマークに belongsTo の関係にあると言えます。
ブックマークと評価を関連づける具体的なコードは次のようになります。
/app/models/bookmark.php
class Bookmark extends AppModel { var $name = 'Bookmark'; var $displayField = 'site_name'; var $hasMany = array('Evaluation' => array('className' => 'Evaluation')); }
/app/models/evaluation.php
class Evaluation extends AppModel { var $name = 'Evaluation'; var $belongsTo = array('Bookmark' => array('className' => 'Bookmark')); }
hasMany の場合は var $hasMany 配列、 belongsTo の場合は var $belongsTo 配列にそれぞれクラス名を登録することでお互いを関連づけます。これがアソシエーションです。
ここで Bookmark クラスに var $displayField という文字列型のフィールドが追加された点に注目してください。これはブックマークの抜粋を意味します。前述のコードの場合 Bookmark の抜粋は site_name です。この抜粋は Bookmark の子供である Evaluation から親を見たとき、親はどのように表示されるかを意味しています。
具体例を見た方が早いかもしれません。
ブックマークの時と同様に /evaluations/ を見てください…と言いたいところですが、せっかくアソシエーションを設定しましたので /bookmarks/ を見てください。一覧から好きなブックマークを選んで Actions 列の View をクリックします。
実行しているのはブックマークのコントローラですのでブックマークの詳細が表示されるのは当然ですが、子供であるブックマークにひも付いた評価もリスト表示されています。これがアソシエーションの結果です。
次はブックマークに評価をつけてる画面です。
対象のブックマークを抜粋( site_name )から選択している点に注意してください。
これで当初の予定であるブックマークリストの大枠が完成しました。
« 「チュートリアル - ブックマークの管理」へ | トップへ | 上の階層へ | 「チュートリアル - 入力データのチェック」へ »