前提

前提として以下のような場合のテーブルでHABTMの設定をしているとします。

テーブルのリレーション

モデル

good.php

<strong>tag.php</strong> [php] <strong>goods_has_tag.php</strong> [php]</p><h3 id="ha27a5272fb">チェックボックス作成用のソースコード</h3><p><strong>コントローラー</strong> [php] function add(){ $this-&gt;set(&apos;tags&apos;, $this-&gt;Good-&gt;Tag-&gt;find(&apos;list&apos;, array( &apos;conditions&apos; =&gt; array( &apos;Tag.deleted&apos; =&gt; null, )))); ... }
ビュー
input(&apos;Tag&apos;,array(&apos;multiple&apos;=&gt;&apos;checkbox&apos;, &apos;label&apos; =&gt; &apos;タグ&apos;)); ?&gt;
このように書いておけば、例えば更新画面の場合は$this->dataに入ってるデータをデフォルトでチェックつけた状態で表示されますし。登録の際に$this->Good->saveAll($this->data);とすればgoods_has_tagsテーブルも更新されます。(更新の場合はDELETE、INSERTされます) 個人的にはHABTMでデータ持つのは面倒な気がしていてあまり好きじゃないので、多対多の場合はカンマ区切りで文字列でデータを持たせるように作ってます。 (goodsの場合だと、goods.tagのようなフィールドを作って文字列で) 文字列で持たせる場合も、以下のコードでチェックボックスを作成できます。
input(&apos;tag&apos;, array(&apos;type&apos; =&gt; &apos;select&apos;, &apos;multiple&apos; =&gt; &apos;checkbox&apos;, &apos;options&apos; =&gt; Invariable::$TAG_TYPES, &apos;value&apos; =&gt; explode(&apos;,&apos;, $this-&gt;data[&apos;Good&apos;][&apos;tag&apos;]), &apos;label&apos; =&gt; &apos;タグ&apos;)); ?&gt;
※タグは定数Invariable::$TAG_TYPESで管理。