2

複数の値を持つことができるCakephpフォームのチェックボックスがあります。ビューで:

<?php // Multiple checkbox form
        echo $this->Form->input('report_types', array(
        'type'=>'select',
        'label'=>'Report Type(s)',
        'multiple'=>'checkbox',
        'options'=>array(
            'option 1'=>'option 1',
            'option 2'=>'option 2',
            'option 3'=>'option 3',
        ),
)); ?>

これをデータベースにロードすると、文字列であるはずの配列を追加しようとしているため、「列が見つかりません:1054不明な列'配列'が'フィールドリスト'にあります」というエラーが返されます。

配列形式のいずれかを文字列に変換しようとしまし$this->request->dataたが、以前の形式の日付選択に干渉します(配列としても保存されます)。

また、複数のチェックボックスフィールドの値だけをモデルのメソッドの文字列に変換しようとしましたbeforeValidate()が、繰り返しが多すぎて、データを「解凍」する必要があるときに面倒になります。

<?php class Request extends AppModel {
    ...
    function beforeValidate() {
        if(!empty($this->request->data['Request']['attachment_types'])) {
            $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']);
        }
        if(!empty($this->request->data['Request']['report_types'])) {
            $this->data['Request']['report_types'] = implode(',', $this->data['Request']['attachment_types']);
        }
        // Am I going to have to keep adding if-statements here? 
        }?>

さらに、!empty()フィールドが空になることは決してないため、このメソッドは機能しません(CakePHPがチェックボックスを入力すると自動的に非表示のフィールドが作成されるため)。

複数のチェックボックス入力をデータベースに送信する方法について誰かがアイデアを持っていますか?かなり控えめなリクエストのようです...CakePHPにはこの点で「自動魔法」のスキルがありますか?

4

1 に答える 1

0

('option 1','option 2','option 3)これを解決するために、配列のデータ型を、データベースで定義されているオプションを持つセットに変更しました。データベースに「セット」データ型がなくても問題ありません。次に、beforeValidate()関数を修正してデータをシリアル化しました。

<?php class Request extends AppModel {
...
function beforeValidate() {
    if($this->request->data['Request']['attachment_types']!=0) {
        $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']);
    }
    if($this->request->data['Request']['report_types']!=0) {
        $this->data['Request']['report_types'] = implode(',', $this->data['Request']['report_types']);
    }
    // Yes, I will just have to keep adding if-statements :(
    }?>

上記の例では、チェックボックス付きの 2 つのフィールド (「report_types」と「attachment_types」) があったことに注意してください。これは、2 つの if ステートメントがある理由を説明しています。

助けてくれてありがとうJvO!

于 2013-01-05T02:26:50.427 に答える