表示系ページの構築に使うクラスとメソッド
ここでいう表示系ページとは、チュートリアルで作成したブックマークリストの /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 の中で…
$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 が示すフィールドを値とした配列で返します。
たとえば…
| id | name | note |
|---|---|---|
| 1 | 東京 | 首都 |
| 2 | 埼玉 | 夏に最高気温を観測 |
| 3 | 千葉 | ディズニーランド |
…というテーブルに…
$results = $this->Prefecture->generateList(null, null, null, "{n}.Prefecture.id", "{n}.Prefecture.name");
…と実行すると、 $results は次のようになります。
array(1 => "東京", 2 => "埼玉", 3 => "千葉" … );
このメソッドはチュートリアルではブックマークに評価をつける画面( /evaluations/add )で使用していました。
たとえば Bookmark モデルの id を $keyPath へ指定する場合は “{n}.Bookmark.id” と書きます。同様に Bookmark モデルの site_name を $valuePath へ指定する場合は “{n}.Bookmark.site_name” と書きます。
このメソッドの結果は、ビューで <select> の <option> タグを出力する際によく用いられます。
« 「リリースへ向けてのコーディング」へ | トップへ | 上の階層へ | 「登録系ページの構築に使うクラスとメソッド」へ »