今回はCakePHPでデータベースにデータを新規に保存する方法について紹介します。
データベースにデータを保存するにはエンティティが必要です。
作業環境は下記の通りです。
- CakePHP(v3.4.4)
- PHP(7.0.8)
サンプルコード
紹介の前に、今回の内容を実装したコードとその動作に必要なテーブルを作成するSQL文を記載します。これから説明する内容はこのコードをベースにしています。
- 保存先のテーブル作成
CREATE TABLE users (
id int(11) PRIMARY KEY AUTO_INCREMENT,
name varchar(50) NOT NULL,
nickname varchar(50) NOT NULL
);
- コード【Controller/UsersController.php】
use Cake\ORM\TableRegistry;
public function add()
{
$savedata['name'] = "田中太郎";
$savedata['nickname'] = "EBE";
$usersTable = TableRegistry::get('Users');
$users = $userTable->newEntity($savedata);
$usersTable->save($users);
}
保存データの準備
保存するデータは一旦連想配列に詰め、その連想配列のキーは保存先のデータベースのカラムと同じ名前でなければなりません。
今回の場合、最初に作成したusersテーブルにname、nicknameのカラムがあるので、コントローラー側の配列savedataではキーをnameとnicknameにしています。
name varchar(50) NOT NULL,
nickname varchar(50) NOT NULL
$savedata['name'] = "田中太郎";
$savedata['nickname'] = "EBE";
エンティティの作成
データの保存にはエンティティが必要な為、エンティティを作成します。
エンティティの作成にはnewEntityを使うことでできます。
newEntityとはテーブルクラスのインスタンスのメソッドでエンティティを作成する働きをし、連想配列を引数として渡す事でそれをエンティティへ変換することもしています。
use Cake\ORM\TableRegistry;
...(略)...
$usersTable = TableRegistry::get('Users');
$users = $userTable->newEntity($savedata);
エンティティの内容をデータベースに保存する
最後に、エンティティをデータベースに保存する為saveを使います。saveはエンティティの内容をデータベースに書き込むことができるメソッドで、データベースのインスタンスに対して実行されます。
$usersTable->save($users);
まとめ
データを保存するにはデータは一旦連想配列に詰めなければならない。それをnewEntityメソッドに引数に渡して、エンティティへの変換を行う。その後エンティティをsaveメソッドを使ってデータベースに書き込む。
参考サイト
- CakePHP cookbook 「エンティティー」
- CakePHP cookbook 「データの保存」
- 初心者のためのCakePHP3 プログラミング入門 「CRUDの基本について (2/9)」
- 【CakePHP入門】saveでデータを保存する方法
- エンティティ (entity)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
昨年大学を卒業したばかりのエンジニアです。CakePHPを勉強中です。拙い部分も多いですがよろしくお願いします。