Advisor belongsTo Room
、の関係を持つ2つのモデルがありRoom hasMany Advisor
ます。特定の部屋を指すAdvisor
データベース()にforeignKey制約があります。Advisor.room_id
これのデフォルト値はNULL
値です(部屋のないアドバイザーを表します)。
に設定されたAdvisor
、があったとします。ここで、部屋の割り当てを解除したいと思います。選択フィールドを使用して、次の構造でにリセットできます。room_id
n
nth
Advisor
room_id
NULL
request->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
フィールドは保存されます。hax
request->data
name
呼び出して保存し$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_id
room_id
どんな助けでも大歓迎です-ありがとう!