【CakePHP】データの一括更新(saveall)を行う
バージョン:CakePHP 2.x
saveallを使ってデータの一括更新を行う方法です。
Usersテーブルにidとnameというフィールドがあり、nameを一括で更新する簡単なサンプルを記載します。
<?php class UsersController extends AppController { function beforeFilter(){ parent::beforeFilter(); } public function index() { // ポストデータがあれば保存をする(保存ボタンが押された場合) if ($this->request->is('post')) { //保存する if ($this->User->saveall($this->request->data['User'])) { // メッセージをセットしてリダイレクトする $this->Session->setFlash('データを登録しました!'); return $this->redirect(array('action'=>'index')); } else { //保存が失敗した場合のメッセージ $this->Session->setFlash('登録に失敗しました'); } } $users = $this->User->find('all'); $this->set('users', $users); } }
<?php class User extends AppModel { }
<?php echo $this->Session->flash() . PHP_EOL;?> <?php echo $this->Form->create('User') . PHP_EOL; ?> <?php foreach($users as $key => $user): ?> <?php echo $this->Form->input("{$key}.id", array('type'=>'hidden', 'value'=>$user['User']['id'])) . PHP_EOL; ?> <?php echo $this->Form->input("{$key}.name", array('value'=>$user['User']['name'])) . PHP_EOL; ?> <?php endforeach; ?> <?php echo $this->Form->submit('保存') . PHP_EOL;?> <?php echo $this->Form->end() . PHP_EOL; ?>
実際の出力(HTML)は下記のようになります。
<div id="flashMessage" class="message">データを登録しました!</div> <form action="/cakephp-2.4.7/users" id="UserIndexForm" method="post" accept-charset="utf-8"> <div style="display:none;"><input type="hidden" name="_method" value="POST"/></div> <input type="hidden" name="data[User][0][id]" value="3" id="User0Id"/> <div class="input text"><label for="User0Name">Name</label><input name="data[User][0][name]" value="aaa" maxlength="50" type="text" id="User0Name"/></div> <input type="hidden" name="data[User][1][id]" value="2" id="User1Id"/> <div class="input text"><label for="User1Name">Name</label><input name="data[User][1][name]" value="bbb" maxlength="50" type="text" id="User1Name"/></div> <div class="submit"><input type="submit" value="保存"/></div> </form>