私は Cakephp 2.1 を使用しています。
私のフォームには、複数の回答 (チェックボックス) を持つことができるフィールドがあります。
オプションごとにデータベース フィールドを作成したり、HABTM を使用したりしたくありません。
アップデート:
いくつかのフラグ セットが必要だったので、$hasAndBelongsToMany の方法を使用しました。(コードを修正せずにテーブルを編集することなく新しいフラグを追加することができます (例: phpmyadmin 経由)。
1.-必要なフラグの各セットのテーブル/モデルを作成しました:
2.-私のメインモデルでは、それぞれへの関係を宣言しました:
var $hasAndBelongsToMany = array('Sample','Format','Report','Openend','Dataproce','Prefield');
3.-メインのコントローラーで、使用するテーブルごとに配列を設定しました:
$openends = $this->Project->Openend->find('list', array(
//'order' => 'name'
));
4.- ビューで配列を使用します。
echo $this->Form->input('Dataproce', array('label' => false, 'type' => 'select', 'multiple' => 'checkbox', 'size' => 2));
=== 古い質問はここから始まります。正解は 1 セットのフラグのみで機能しました ===
文字列を保存し、それを使用して、単一のデータ フィールドに属するチェックボックスのグループを魔法のように作成したいと考えています。
私はもうその真っ只中にいます。
私の見解:
echo $this->Form->input('pr_reports', array('type' => 'select',
'multiple' => 'checkbox',
'options' => array('0' => 'Interrnal',
'1' => 'Disposition',
'2' => 'Web Disposition',
'3' => 'Marginal',
'4' => 'Custom')))
保存する前に、コントローラーの追加メソッド
// Used serialize() to convert the array to string
$dataString = serialize($this->request->data['Project']['pr_reports']);
$this->request->data['Project']['pr_reports'] = $dataString;
文字列は問題なく保存されています (エンコードされているようですが問題ありません: a:5:{i:0;s)
私の質問は、チェックボックスがそれに応じてチェックするためにレコードを編集するときにどうすればよいですか? つまり、どこで文字列フィールドを unserialize() し、編集ビューでこれを処理するのでしょうか?
これにはもっと良い方法がありますか?
助けてくれてありがとう。
カルロス・ガルシア
==== 解決後、フラグ データのセットが異なる複数のフィールドを持つ問題は、1
つのフィールドに対してのみ保存され、他のフィールドは無視されます ====
こんにちは;
テーブルの 1 つのフィールドでは、前述のように問題なく機能します。
別のフィールド (フラグの別のセット) を使用するのに苦労しています。
動作が 1 つだけ添付されているようです。別々に付けようか迷っていました。
私のフィールド:
pr_data_format` tinyint(3) unsigned NOT NULL,
pr_report_format` tinyint(3) unsigned NOT NULL,
私のコントローラー
$this->Project->Behaviors->attach('Bitmasked', array('mappedField'=>'pr_data_formats', 'bits'=>'Project::pr_data_formats'));
$this->Project->Behaviors->attach('Bitmasked', array('mappedField'=>'pr_report_formats', 'bits'=>'Project::pr_report_formats'));
私のモデル
const STATUS_ASCII = 1;
const STATUS_SPSS = 2;
const STATUS_EXCEL = 4;
const STATUS_CUSTOM = 8;
public static function pr_data_formats($value = null) {
$options = array(
self::STATUS_ASCII => __('ASCIId'),
self::STATUS_SPSS => __('SPSSBd'),
self::STATUS_EXCEL => __('Exceld'),
self::STATUS_CUSTOM => __('Customd'),
);
return parent::enum($value, $options);
}
const REP_ASCII = 1;
const REP_SPSS = 2;
const REP_EXCEL = 4;
const REP_CUSTOM = 8;
public static function pr_report_formats($value = null) {
$options = array(
self::REP_ASCII => __('ASCIIr'),
self::REP_SPSS => __('SPSSBr'),
self::REP_EXCEL => __('Excelr'),
self::REP_CUSTOM => __('Customr'),
);
return parent::enum($value, $options);
}
私の見解
echo $this->Form->input('pr_data_formats', array('options' => Project::pr_data_formats(), 'multiple' => 'checkbox'));
echo $this->Form->input('pr_report_formats', array('options' => Project::pr_report_formats(), 'multiple' => 'checkbox'));
それを理解できない、試してみた:
$this->Project->Behaviors->attach('Bitmasked', array('mappedField'=>'pr_report_formats', 'bits'=>'Project::pr_report_formats'), array('mappedField'=>'pr_data_formats', 'bits'=>'Project::pr_data_formats'));
1 つのフィールドのみが更新されます。
手伝ってくれますか?4 つまたは 5 つのフラグセットを使用します。
どうもありがとう。
カルロス