Advisor belongsTo Room、の関係を持つ2つのモデルがありRoom hasMany Advisorます。特定の部屋を指すAdvisorデータベース()にforeignKey制約があります。Advisor.room_idこれのデフォルト値はNULL値です(部屋のないアドバイザーを表します)。
に設定されたAdvisor、があったとします。ここで、部屋の割り当てを解除したいと思います。選択フィールドを使用して、次の構造でにリセットできます。room_idnnthAdvisorroom_idNULLrequest->data
[Room] => Array
(
[name] => TestRoom2
[type] => single suite
[id] => 4
)
[Advisor] => Array
(
[0] => Array
(
[id] => 14
[room_id] =>
[name] => foo
)
)
ただし、同じ生成されたチェックボックスを使用してこれを実行しようとすると$this->request->data、MySQLは値の更新を拒否しNULLます。
room_idまた、2番目のケースで明示的にの値を変更しrequest->dataても効果がないようです。ただし、(直接変更して)に変更すると、Advisor.0.nameフィールドは保存されます。haxrequest->dataname
呼び出して保存し$this->Room->saveAll($request->data, array('deep' => true))ます。これは、選択フィールドとチェックボックスの両方の場合に当てはまります。
Formヘルパーを繰り返し呼び出すことにより、一連のチェックボックスを生成しています。
$count = 0;
// $key is the Advisor id, and $attributes is an array of the form
// array('name' => (string), 'disabled' => (bool))
foreach($options['advisorList'] as $key => $attributes) {
$form[] = $this->Form->hidden(sprintf('Advisor.%s.id', $count), array('value' => $key));
$form[] = $this->Form->input(sprintf('Advisor.%s.room_id', $count), array(
'type' => 'checkbox',
'label' => $attributes['name'],
'disabled' => $attributes['disabled']));
$count++;
}
また、room_idすでにに設定されている場合は、チェックボックスがオンになっているかどうかに関係なく設定される場合を除いて、NULL問題なく設定できます。room_idroom_id
どんな助けでも大歓迎です-ありがとう!