CakePHP HABTMのデータのチェックボックスを作る
cake PHP 1.2.3.8166.
以前、Cake PHP チェックボックスを作るにて、チェックボックスをフォームヘルパーで作る方法を書きましたが、HABTMの構造から、いとも簡単にチェックボックスを作る方法を書いておきます。
HABTMとは何ぞや?という話については、下記を参考にしてください。
http://book.cakephp.org/ja/view/83/hasAndBelongsToMany-HABTM
多対多の関連をもつデータ構造です。
さて、ではサンプルとして、下記のような2つのテーブルを関連づけたいとします。
クラス名:Student テーブル名:students id name 1 孫悟空 2 ヤムチャ 3 天津飯
クラス名:Teacher テーブル名:teachers id name 1 亀仙人 2 桃白白 3 カリン様
Student(弟子)は多くのTeacher(先生)を選ぶことができ、先生も、多くの弟子を持つことができます。
【注意】:フィールドの名前を、idとnameにしておかないと、チェックボックスフォームに自動的に反映されません!
(けっこう悩みました)
それぞれを関連させるために、
student_teachers
というテーブルを作ります。
クラス名は’StudentTeacher’ です。
【注意】:HABTMのテーブルはマニュアルサイトなどもみると、上記の例だと
“students_teachers” 複数形_複数形というテーブル名が正しいはずです。
私の環境だと、student_teachers 単数形_複数形にしないとうまく動きませんでした。なので、上記のように書いてあります。
そのほか、モデルの設定やコントローラーでのHABTMの設定は、正しくしておいてください。
ではやっと、弟子を一人追加するフォームを作ります。addというメソッドを使います。
当然、先生を複数選びたいので、チェックボックスフォームを使います。
コントローラーに記載 function add(){ $this->set('teachers', $this->Student->Teacher->find('list') ); //以下コントローラーのコードが続く
ビューに記載 <?php echo $form->input('Teacher',array('multiple'=>'checkbox')); ?>
なんとこれだけで、終わり!すばらしいです。
チェックボックスができるのを確かめてみてください。
参考:下記のページに地味に書いてありますw
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements
- これはすごい!これで解決だ!と思ったんですけど、保存がうまくできませんでした。うーむ。まだまだ解決まで遠いようです(;_; — ほ {2009-10-24 (土) 21:38:50}
- と書いたら解決しました!まさに奇跡!!まず’multiple’=>’checkbox’はarray(‘multipe’ => ‘checkbox’)ですね。あとは、$this->set(‘teachers’はいいんですが、それに対して、viewのところは$form->input(‘Teacher’でした!!!このページがとっかかりになって解決です!!とてもとてもありがとうございました!! — ほ {2009-10-24 (土) 21:48:44}
- ほ様ご指摘、ありがとうございます!その通りですね。訂正しておきます! — AG {2009-10-26 (月) 19:06:25}
- HABTMを検索してここに来ました。素晴らしい機能ですね!ありがとうございます! — bltk {2010-03-18 (木) 11:11:05}