チュートリアル - ブックマークに評価をつける

ブックマークの管理ができるようになりましたので、次はブックマークを評価できるよう拡張します。

さきほどと同じ手順で 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

<?php
class Bookmark extends AppModel
{
  var $name = 'Bookmark';
  var $displayField = 'site_name';

  var $hasMany = array('Evaluation' =>
                       array('className' => 'Evaluation'));
}
?>

/app/models/evaluation.php

<?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 をクリックします。

cakephp_tut_100.png

実行しているのはブックマークのコントローラですのでブックマークの詳細が表示されるのは当然ですが、子供であるブックマークにひも付いた評価もリスト表示されています。これがアソシエーションの結果です。

次はブックマークに評価をつけてる画面です。

cakephp_tut_101.png

対象のブックマークを抜粋( site_name )から選択している点に注意してください。

これで当初の予定であるブックマークリストの大枠が完成しました。

« 「チュートリアル - ブックマークの管理」へ  |  トップへ  |  上の階層へ  |  「チュートリアル - 入力データのチェック」へ »

トップページへ戻る / 前のページへ戻る

back to top