cakePHP4でデータベースにデータを登録させたいんだけど、どうすればいいんだろう…
こんな疑問を解決します。
この記事を最後まで読むことで、
- テーブルにデータを登録できる
- 例外処理をつけてデータを登録できる
companiesテーブル(id, company_code(integer), company_name(string))を用意し、実際にデータを入れていきます。
↓完成形
【関連記事】
・cakephp4でDBのデータを取得
・cakephp4でテーブルのデータを更新
・cakephp4テーブルにデータを削除
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
DB登録はsaveメソッドでできる
データベースにデータを登録する場合は、saveメソッドを使います。
例)
$this->companies->save($company);
また、ルールチェックやエンティティーエラーが発生した場合に例外を投げてくれるsaveOrFailも覚えておきましょう。
saveOrFailはtry catchと使い、実務でよく使うし安全です。
try {
$this->companies->saveOrFail($company);
} catch (\Cake\ORM\Exception\PersistenceFailedException $e) {
echo $e->getEntity();
}
テーブルにデータを登録する
以下のように書けばデータを登録できます。
<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\ORM\TableRegistry;
/**
* Companies Controller
*
* @property \App\Model\Table\CompaniesTable $Companies
* @method \App\Model\Entity\Company[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = [])
*/
class CompaniesController extends AppController
{
public function initialize(): void
{
parent::initialize();
//companiesのDBを指定
$this->companies = TableRegistry::get('Companies');
}
/**
* データベースにデータを保存する処理
*/
public function add()
{
// エンティティーの生成
$company = $this->companies->newEmptyEntity();
// dd($company)
/**
* dd($company)のデバッグ結果
*/
// object(App\Model\Entity\Company) id:0 {
// '[new]' => true
// '[accessible]' => [
// 'compnay_code' => true,
// 'compnay_name' => true,
// ]
// '[dirty]' => [ ]
// '[original]' => [ ]
// '[virtual]' => [ ]
// '[hasErrors]' => false
// '[errors]' => [ ]
// '[invalid]' => [ ]
// '[repository]' => 'Companies'
// }
$company->id = 1;
$company->company_code = 1;
$company->company_name = "カモメ株式会社";
// dd($company)
/**
* dd($company)のデバッグ結果
*/
// object(App\Model\Entity\Company) id:0 {
// 'id' => (int) 1
// 'company_code' => (int) 1
// 'company_name' => 'カモメ株式会社'
// '[new]' => true
// '[accessible]' => [
// 'compnay_code' => true,
// 'compnay_name' => true,
// ]
// '[dirty]' => [
// 'id' => true,
// 'company_code' => true,
// 'company_name' => true,
// ]
// '[original]' => [ ]
// '[virtual]' => [ ]
// '[hasErrors]' => false
// '[errors]' => [ ]
// '[invalid]' => [ ]
// '[repository]' => 'Companies'
// }
// データ登録
$this->companies->save($company);
}
}
$company->idとか$company->company_codeとかありますが、->カラム名でテーブルのカラムにアクセスできます。
saveOrFailを使う場合
/**
* データベースにデータを保存する処理
*/
public function add()
{
// エンティティーの生成
$company = $this->companies->newEmptyEntity();
$company->id = 1;
$company->company_code = 1;
$company->company_name = "カモメ株式会社";
// データ登録
try {
$this->companies->saveOrFail($company);
} catch (\Cake\ORM\Exception\PersistenceFailedException $e) {
echo $e->getEntity();
}
}
これでテーブルにデータを登録できます。
newEmptyEntityの他に、newEntityメソッドがあります。newEntityは、渡されたデータ($data)のバリデーションチェックするので、チェックしたくない場合はvalidateをfalseに設定します。
$companies->newEntity($data, [‘validate’ => false])
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コメント