CakePHPを使って、テーブル形式で番号順に並んでいるデータを変更したものを、一括でDBに登録したい場合の方法についてです。
エクセルの表みたいにずらーっと並んだデータを変更して更新したい時って多いですよね。
これらはsaveAllメソッドを使えば簡単に実行できてしまいます。
Viewは以下のような画面になります。(name1 age1 などの項目はインプットボックスになっており、フォームの一番下には更新ボタンが付いています)
| name1 | age1 |
| name2 | age2 |
| name3 | age4 |
[更新ボタン]
View
フォームの中に3組のインプットボックスを作ります。
echo $this->Form->create ( 'User', array ( 'type' => 'post',//POSTとGETの設定 'controller' => 'users',//コントローラーの設定 'action' => 'edit',//アクションの設定 ) ); echo $this->Form->input ( 'User.0.name.'); echo $this->Form->input ( 'User.0.age'); echo $this->Form->input ( 'User.1.name'); echo $this->Form->input ( 'User.1.age'); echo $this->Form->input ( 'User.2.name'); echo $this->Form->input ( 'User.2.age'); echo $this->Form->end('送信');
ポイントとなるのは、input ( ‘User.0.name.’)という書き方です。
この書き方をすることによって、POSTで取得されるデータは
$data = array( 'User' => array( 0 => array( 'name' => '太郎', 'age' => 10 ), 1 => array( 'name' => '花子', 'age' => 8 ), 2 => array( 'name' => '二郎', 'age' => 5 ), ) );
$this->User->saveAll($data[‘User’]);
$data[‘User’]というように$dataの後ろにモデル名を指定するところがポイントです。