[CakePHP] 複数レコードを一括保存するsaveAllの使い方

CakePHPを使って、テーブル形式で番号順に並んでいるデータを変更したものを、一括でDBに登録したい場合の方法についてです。
エクセルの表みたいにずらーっと並んだデータを変更して更新したい時って多いですよね。
これらはsaveAllメソッドを使えば簡単に実行できてしまいます。
Viewは以下のような画面になります。(name1 age1 などの項目はインプットボックスになっており、フォームの一番下には更新ボタンが付いています)
| name1 | age1 |
| name2 | age2 |
| name3 | age4 |
[更新ボタン]
View
フォームの中に3組のインプットボックスを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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で取得されるデータは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$data = array( 'User' => array( 0 => array( 'name' => '太郎', 'age' => 10 ), 1 => array( 'name' => '花子', 'age' => 8 ), 2 => array( 'name' => '二郎', 'age' => 5 ), ) ); |
$data[‘User’]というように$dataの後ろにモデル名を指定するところがポイントです。関連記事
- [CakePHP] Formでテーブル形式のデータを一括保存する方法
- [CakePHP]ajax前後でフォームパーツのname属性のキーが変わる場合の対処方法
- [CakePHP] 独自SQLのAS句で新しいフィールドを作りCakePHPの形式でデータを出力する方法
- [CakePHP] ネスト構造の配列を簡単に扱う方法 Set::extract()
- [Laravel] MySQLと連動させてCRUDを作成する