2011-02-08 6 views
1

私はテーブル,およびtypeを持つテーブルuserを持っています。 typeは、従業員,ベンダーおよびクライアントのいずれかまたはこれらの組み合わせです。ユーザーはベンダークライアントのいずれか、または別の組み合わせの両方になることができます。 typeフィールドでは、複数のチェックボックスを使用しています(下記のコードを参照)。このコードはでカンマ区切り値として複数の値を保存cakephpのユーザレコードを編集中にチェックボックスがオフになっています

app/models/user.php 

function beforeSave() { 
     if(!empty($this->data['User']['type'])) { 
      $this->data['User']['type'] = join(',', $this->data['User']['type']); 
     } 
     return true; 
    } 

:私はbeforeSaveコールバックメソッドを使用しているモデルファイルで

<div class="users form"> 
<?php echo $this->Form->create('User');?> 
    <fieldset> 
     <legend><?php __('Add User'); ?></legend> 
    <?php 
     echo $this->Form->input('username'); 
     echo $this->Form->input('password'); 

     echo $this->Form->input('type', array('type' => 'select', 'multiple' => 'checkbox','options' => array(
    'client' => 'Client', 
    'vendor' => 'Vendor', 
    'employee' => 'Employee' 
    ) 
)); 
    ?> 

    </fieldset> 
<?php echo $this->Form->end(__('Submit', true));?> 
</div> 

:これは、ビュー/ユーザー/ add.ctpファイルでありますデータベース。

主な問題は、ユーザーを編集しているときです。ユーザがユーザ作成中に複数のタイプを選択した場合、タイプのチェックボックスはチェックされません。

+3

まだ未チェックです。このモデルのコードに時間を費やす前に、その部分を正しく取得してください。 User-> Typeは1対多の関係です。そのタイプの関係は、ユーザが1行から3行までの間にある場合がある第2の表で表される。 1つの列に複数の値がある場合(つまり、列の値がアトミックでない場合)は、デザインを正規化していません。 –

+0

@Dan:新しいテーブルタイプとユーザタイプテーブルを作成して、ユーザとタイプを関連付ける必要があるとします。 –

+0

必ずしも型テーブルは必要ありませんが、user_typeテーブルはあります。 –

答えて

0

beforeSave()内に$this->data['User']['type'] = join(',', $this->data['User']['type']);があるので、afterFind()$this->data['User']['type'] = explode(',', $user['User']['type']);で同じことを行う必要があります。これにより、配列が再び作成されます。

これは恐ろしいデザインなので、適切に行うことを検討する必要があります。この$this->data['User']['type'] = explode(',', $user['User']['type']);を次後dogmatic69 @

0

と配列が適切にチェックボックスを配置しているあなたがそもそも間違ってモデル化されたデータを持っている

関連する問題