表示系ページの構築に使うクラスとメソッド

ここでいう表示系ページとは、チュートリアルで作成したブックマークリストの /bookmarks/index のようにテーブルのレコードを一覧表示するページと、/bookmarks/view のようにあるレコードに対する詳細情報を表示するページを指します。

Model::findAll()

モデルに関連付いたテーブルから条件を満たすすべてのレコードを取得します。

Model::findAll ( $conditions = null,
                 $fields = null,
                 $order = null,
                 $limit = null,
                 $page = 1,
                 $recursive = null
)

$conditions 取得する条件(省略時は全件取得)
$fields     取得するフィールドのリスト(省略時は全フィールド取得)
$order      取得するレコードの表示順(省略時はレコードの格納順)
$limit      取得する件数(省略時は全件取得)
$page       取得するページ数(省略時は1ページ目を取得)
$recursive  再帰的に取得するアソシエーションの深さ(省略時はひとつ深いモデルまで取得)

$conditions をすべて満たすレコードを取得して、結果を CakePHP 配列へ詰めて返します。

このメソッドはチュートリアルではブックマーク一覧ページ( /bookmarks/index )を作る際に使用していました。

もしブックマークモデルの中に「削除」を意味する delete_flag を用意して、 delete_flag が1のブックマークは表示したくないという場合は $conditions に “delete_flag != 1″ と書きます。

Model::find()

モデルに関連付いたテーブルから条件を満たすレコードを1件取得します。

Model::find ( $conditions = null,
              $fields = null,
              $order = null,
              $recursive = null
)

$conditions 取得する条件(省略時は一番最初に取得したレコード)
$fields     取得するフィールドのリスト(省略時は全フィールド取得)
$order      取得するレコードの表示順(省略時はレコードの格納順)
$recursive  再帰的に取得するアソシエーションの深さ(省略時はひとつ深いモデルまで取得)

$conditions をすべて満たすレコードを1件取得して、結果を CakePHP 配列へ詰めて返します。1件しか取得しないため1件を特定する条件を $conditions に書く必要があります。

Model::read()

モデルに関連付いたテーブルからプライマリキーに対応するレコードを1件取得します。

Model::read ( $fields = null,
              $id = null
)

$fields 取得するフィールドのリスト(省略時は全フィールド取得)
$id     取得するレコードのプライマリキー

プライマリキーが $id のレコードを1件取得して、結果を CakePHP 配列へ詰めて返します。アソシエーションを1度だけ再帰的に取得する点に注意してください。

このメソッドはチュートリアルではブックマーク詳細情報の表示ページ( /bookmarks/view )を作る際に使用していました。

Model::findByXXXX

モデルに関連付いたテーブルから XXXX で示すフィールドの値が指定した値と一致するレコードを取得します。

これはマジックメソッドで XXXX にはフィールド名が入ります。

たとえばチュートリアルの BookmarksController の中で…

<?php
$result = $this->Bookmark->findBySiteName("Yahoo! Japan");
?>

…と書くことができます。

この場合 site_name というフィールドの値が “Yahoo! Japan” のレコードを取得して、結果を CakePHP 配列へ詰めて返します。

Model::findBy に続く名前がフィールド名の単語の頭文字を大文字にしてアンダーバーを除去した形式になる点に注意してください。たとえば site_name の場合は SiteName になります。

Model::beforeFind()

Model::find() や Model::findAll() の前に実行されるコールバックメソッドです。

Model::beforeFind ( &$queryData
)

&$queryData find() や findAll() へ渡された引数

$queryData へ渡される Model::find() や Model::findALl() の引数を編集することで、取得条件にフィルタをかけることができます。 $queryData 配列は仮引数の名前をキーとしています。

たとえば delete_flag という可視不可視を意味するフィールドを持つテーブルに対して、透過的に可視テーブルのみを取得したい場合、 Model::beforeFind() の中で $queryData[”conditions”] = “delete_flag = 0″; と記述すると、 Model::find() の引数が空でも delete_flag = 1 のフィールドは取得されません。

なお、このメソッドは返り値として true を返す必要がある点に注意してください。もし false を返した場合 Model::find() や Model::findAll() は終了します。

Model::afterFind()

Model::find() や Model::findAll() の後に実行されるコールバックメソッドです。

Model::afterFind ( $results
)

$results Model::find() や Model::findAll() の結果

$results へ渡される Model::find() や Model::findAll() の取得結果を編集することで、最終的な取得結果に手を加えることができます。

$results の形式は CakePHP 配列です。

Model::generateList()

モデルに関連付いたテーブルから条件を満たすすべてのレコードを取得し、あるフィールドを配列のキー、あるフィールドを配列の値とする配列で取得します。

Model::generateList ( $conditions = null,
                      $order = null,
                      $limit = null,
                      $keyPath = null,
                      $valuePath = null 
)

$conditions 取得する条件(省略時は全件取得)
$order      取得するレコードの表示順(省略時はレコードの格納順)
$limit      取得する件数(省略時は全件取得)
$keyPath    返り値となる配列のキーになるフィールド
$valuePath  返り値となる配列の値となるフィールド

$conditions をすべて満たすレコードを取得して、 $keyPath が示すフィールドをキー、 $valuePath が示すフィールドを値とした配列で返します。

たとえば…

prefectures
id name note
1 東京 首都
2 埼玉 夏に最高気温を観測
3 千葉 ディズニーランド

…というテーブルに…

<?php
$results = $this->Prefecture->generateList(null, null, null,
                                           "{n}.Prefecture.id",
                                           "{n}.Prefecture.name");
?>

…と実行すると、 $results は次のようになります。

<?php
array(1 => "東京",
      2 => "埼玉",
      3 => "千葉");
?>

このメソッドはチュートリアルではブックマークに評価をつける画面( /evaluations/add )で使用していました。

たとえば Bookmark モデルの id を $keyPath へ指定する場合は “{n}.Bookmark.id” と書きます。同様に Bookmark モデルの site_name を $valuePath へ指定する場合は “{n}.Bookmark.site_name” と書きます。

このメソッドの結果は、ビューで <select> の <option> タグを出力する際によく用いられます。

« 「リリースへ向けてのコーディング」へ  |  トップへ  |  上の階層へ  |  「登録系ページの構築に使うクラスとメソッド」へ »

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

back to top