0

レコードを追加するとき、ユーザーが必要な数のチェックボックスをマークできるようにしました。

echo $this->Form->input('us_roles', array('label' => 'Roles:',  'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));

選択したインデックスをBDの文字列フィールドに問題なく保存します。(例: 1,2,3 が保存されます)

ただし、そのレコードを編集するとき、チェックボックスは適切に設定されていない - 選択されています。(1,2,3 などの文字列テキストに基づく

データベースに文字列として保存されている値をcheckboxexに反映させるにはどうすればよいですか?

私の編集ビューは私の追加ビューと同じものを使用します:

echo $this->Form->input('us_roles', array('label' => 'Roles:',  'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));

* *詳細

新しいレコードを追加するとき、選択からの選択をデータに内破します。

$this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']);

編集したレコードを保存するときも同じです。

問題は、検索時に文字列を us_roles 入力に変換するにはどうすればよいですか?

echo $this->Form->input('us_roles', array('label' => 'Roles:',  'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));

手伝ってくれますか?

--- 更新、修正済み ---

    public function edit($id = null) {
    $this->User->id = $id;
    if (!$this->User->exists()) {
        throw new NotFoundException(__('Invalid user'));
    }
    if ($this->request->is('post') || $this->request->is('put')) {
        $this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']);
        if ($this->User->save($this->request->data)) {
...
 } else {
             $this->request->data = $this->User->read(null, $id);
        $this->request->data['User']['us_roles'] = explode(",", $this->request->data['User']['us_roles']);

 }  
4

1 に答える 1

0

今私は理解しています...あなたはimplode()の反対を探しています。それはexplode()になります。

または、文字列クラス( http://book.cakephp.org/2.0/en/core-utility-libraries/string.html#String::tokenize)を使用できます。

$array = String::tokenize($string, ',');

値の配列を取り戻す必要があります。

しかし、私を信じてください、それを行うには通常より良い方法があります。別のデータベーステーブル+モデルにすることができます。ArrayDatasourceを使用できます。そのような場合のように、ビットマスクされたソリューションを使用できます(http://www.dereuromark.de/2012/02/26/bitmasked-using-bitmasks-in-cakephp/)。最後のアプローチの利点は、追加のテーブルの全機能を使用しながら、単一のフィールド(および非常に少量のスペース)のみを使用できることです。NOT、AND、OR、...での完全な検索

于 2013-01-08T22:25:45.603 に答える