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

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の後ろにモデル名を指定するところがポイントです。



Author: webmaster