【市場価値がわかる】エンジニア転職におすすめなサイト

cakephp4テーブルにデータを登録する方法

データの保存

cakePHP4でデータベースにデータを登録させたいんだけど、どうすればいいんだろう…

こんな疑問を解決します。

この記事を最後まで読むことで、

  • テーブルにデータを登録できる
  • 例外処理をつけてデータを登録できる

companiesテーブル(id, company_code(integer), company_name(string))を用意し、実際にデータを入れていきます。

↓完成形

【関連記事】
cakephp4でDBのデータを取得
cakephp4でテーブルのデータを更新
cakephp4テーブルにデータを削除

Contents

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])

>>転職するのにおすすめのサイトはこちらをクリック
>>副業で稼ぐためにおすすめのサイトはこちらをクリック

スキルを売り買いするならココナラ

オンライン動画学習ならUdemy

コメント

コメントする

CAPTCHA


Contents
閉じる