CakePHP

【CakePHP2】HABTMモデルの練習

いくつか CakePHP でコンテンツを作成してきたのですが、HABTM(HasAndBelongsToMany)を利用したリレーションを作成したことがなかったので、どんなものなのか作成してみました。

HABTMで検索し、blogですかい さんで紹介されていたアニメと声優の関係を作成するというケースがなかなか分かりやすかったので、それに挑戦してみました。

CakePHPの「HABTM」作成

テーブル作成

今回は

  • animes テーブル
  • voiceactors テーブル
  • animes_voiceactors テーブル

の3つのテーブルを用意します。

[]

↑ ER図もどき

肝は「animes_voiceactors」テーブル。

テーブルの命名規則でアルファベット順、どちらも複数形のテーブル名を付ける必要があります。
アルファベット順が逆になる「voiceactors_animes」テーブルでは「テーブルが無いよ!」というエラーが出ます。

ではチャチャッとテーブルをSQLで作成、データを放り込みます。
”atn_”はテスト用につけたプレフィックスです。

animes テーブル

voiceactors テーブル

animes_voiceactors テーブル

80年台の香りがプンプンですな(笑)

CakePHPのモデル作成

次にモデルの作成。

  • Anime.php
  • Voiceactor.php
  • AnimesVoiceactor.php

上記3つを用意。
HABTM用のモデルは 前が複数形、後が単数形の単語になるというややこしい命名規則です。

Anime.php

Voiceactor.php

AnimesVoiceactor.php

CakePHPの「HABTM」結果

Anime一覧

HABTM_anime_list

Anime一覧のデバッグ

HABTM設定前

AnimeモデルのHABTM設定後

Anime詳細

HABTM_anime_detail_urusei

Anime詳細のデバッグ

Voiceactor一覧

HABTM_va_list

Voiceactor一覧のデバッグ

HABTM設定前

VoiceactorモデルのHABTM設定後

Voiceactor詳細

HABTM_va_detail_furukawa

Voiceactor詳細のデバッグ

各レコードの取得に際しての recursive 値は 1 ですが、HABTM設定後はいい具合にリレーションして取得していますね。
モデルさえきちんと設定できればあまり何も考えずに必要レコードを引っ張ってきてくれるので、なかなか便利な設定ではないでしょうか。

参考にしたサイト様

CakePHP2でHABTMなモデルを作った話 - blogですかい

-CakePHP
-, ,