CakePHP3のレコード更新方法まとめ(save・updateAll)。
目次
・ save(更新対象: 1レコード)
・ updateAll(更新対象: 条件一致レコード)
● 使用例のテーブル定義(usersテーブル)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // ユーザーテーブル // status 0:仮登録 1:本登録 2:退会 CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `email` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `status` char(1) DEFAULT 0, `created` DATETIME DEFAULT NULL, `modified` DATETIME DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; // テストデータ INSERT INTO `users` (`id`, `email`, `password`, `status`, `created`, `modified`) VALUES (NULL, '001@cakephp3.com', '001', '0', NULL, NULL), (NULL, '002@cakephp3.com', '002', '1', NULL, NULL); |
◯ save(更新対象: 1レコード)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // usersテーブルのid:1取得 $user = $this->Users->get('1'); // postデータ Array('email' => 'u001@cakephp3.com', 'password' => 'u001') $post_data = $this->request->getData(); // ユーザーデータをフォームからのpostデータで上書き $user = $this->Users->patchEntity($user, $post_data); // ユーザーデータ更新 $this->Users->save($user); // 生成SQL UPDATE users SET email = 'u001@cakephp3.com', password = 'u001', modified = '2017-11-25 17:37:10' WHERE id = 1 |
◯ updateAll(更新対象: 条件一致レコード)
1 2 3 4 5 6 7 8 9 10 | // ユーザーデータ更新(ex: 0(status)の全レコードを2(status)に変更する) $this->Users->updateAll(['status' => '2'], ['status' => '0']); // 生成SQL UPDATE users SET status = '2' WHERE status = '0' |