CakePHP

CakePHPのHABTMモデルの練習 その2

2015/03/18

前回はとりあえずHABTMモデルを作っただけでしたので、もう少しだけ踏み込んで拡張してみたいと思います。

テーブルの拡張と検索用フォームの作成

テーブル拡張

voiceactorsテーブルに五十音で検索できるようになどを考えて氏名カナ、性別を追加。
レコードは適宜作成。

Voiceactor一覧画面からAnime別で検索

現在のレコードは以下の感じ。
なお、一覧でVoiceactorが参加したAnimeも表示するようにしています。

HABTM_va_list_2_1

上の方に、(Gender)性別、Ainimeをオプションとして検索できるように、フォームを追加。
このフォームを稼働させることが今回の目的です。

HABTMでの検索

テーブル結合

では本題。

画面にもありますが、Voiceactor一覧画面に、参加しているAnimeの一覧は取得できるのですが、このままでは Voiceactor一覧画面から Animeを条件として検索しようとしても、テーブルを連結していないため抽出することは出来ません。
なので、テーブルを連結して find すれば良いということですね。

ということで、find 部分に手を加えます。

マニュアル参照
アソシエーション: モデル同士を繋ぐ - CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html#id6

ほぼ、マニュアルそのまんまでOK。

画面のAnimeを「アニメ三銃士」とした場合の画面と、作成されるSQLは以下の感じ。

画面

HABTM_va_list_2_2

Voiceactorの抽出部

これで、
ID:2 / 神谷 明 氏
ID:3 / 千葉 繁 氏
ID:4 / 平野 文 氏
が抽出され、

Animeの抽出部

これで、
神谷 明 氏 / うる星やつら, シティハンター, アニメ三銃士, バビル2世
千葉 繁 氏 / うる星やつら, ハイスクール!奇面組, アニメ三銃士
平野 文 氏 / うる星やつら, アニメ三銃士

が抽出されます。

うーむ、奥深い。

-CakePHP