Cake PHP HABTMのデータをチェックボックスに表示する

PHP

CakePHP HABTMのデータのチェックボックスを作る

cake PHP 1.2.3.8166.

PHP

以前、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}
カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です