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

cakePHP4でモデルの作成手順を解説!3パターンのbakeコマンド

cakephp4モデル

cakePHP4でモデルを作成するにはどうすればいいんだろう…

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

【開発環境】
PHP8.1
cakePHP4

また、準備としてitemsテーブルを作成しておきましょう。

itemsテーブルに関しては、idやnameなどの最低限のカラムを持たせておいてください。

Contents

cakePHP4でモデルを作成する-通常

モデルを作成するbakeコマンド

$ bin/cake bake model Items

以下のように実行されます。

$ bin/cake bake model Items
One moment while associations are detected.

Baking table class for Items...

Creating file /var/www/html/src/Model/Table/ItemsTable.php
Wrote `/var/www/html/src/Model/Table/ItemsTable.php`
Deleted `/var/www/html/src/Model/Table/.gitkeep`

Baking entity class for Item...

Creating file /var/www/html/src/Model/Entity/Item.php
Wrote `/var/www/html/src/Model/Entity/Item.php`
Deleted `/var/www/html/src/Model/Entity/.gitkeep`

Baking test fixture for Items...

Creating file /var/www/html/tests/Fixture/ItemsFixture.php
Wrote `/var/www/html/tests/Fixture/ItemsFixture.php`
Deleted `/var/www/html/tests/Fixture/.gitkeep`
Bake is detecting possible fixtures...

Baking test case for App\Model\Table\ItemsTable ...

Creating file /var/www/html/tests/TestCase/Model/Table/ItemsTableTest.php
Wrote `/var/www/html/tests/TestCase/Model/Table/ItemsTableTest.php`
Done

Doneとなれば、成功です。
以下のようにそれぞれファイルが作成されます。

  • /Model/Entity/Item.php
  • /Model/Table/ItemsTable.php
  • /tests/Fixture/ItemsFixture.php
  • /tests/TestCase/Model/Table/ItemsTableTest.php

cakePHP4でモデルを作成する-テストファイルが不要な場合

テストファイルが不要でモデルを作成

$ bin/cake bake model Items --no-test --no-fixture

以下のように実行されます。

$ bin/cake bake model Items --no-test --no-fixture
One moment while associations are detected.

Baking table class for Items...

Creating file /var/www/html/src/Model/Table/ItemsTable.php
Wrote `/var/www/html/src/Model/Table/ItemsTable.php`

Baking entity class for Item...

Creating file /var/www/html/src/Model/Entity/Item.php
Wrote `/var/www/html/src/Model/Entity/Item.php`

テストファイル抜きで作成されます。

  • /Model/Entity/Item.php
  • /Model/Table/ItemsTable.php

cakePHP4でモデルを作成する-テーブル名と異なるモデル名にしたい場合

テーブル名と異なるモデル名にする場合

$ bin/cake bake model SecoundItems --table items

以下のように実行されます。

$ bin/cake bake model SecoundItems --table items                       
One moment while associations are detected.

Baking table class for SecoundItems...

Creating file /var/www/html/src/Model/Table/SecoundItemsTable.php
Wrote `/var/www/html/src/Model/Table/SecoundItemsTable.php`

Baking entity class for SecoundItem...

Creating file /var/www/html/src/Model/Entity/SecoundItem.php
Wrote `/var/www/html/src/Model/Entity/SecoundItem.php`

Baking test fixture for SecoundItems...

Creating file /var/www/html/tests/Fixture/SecoundItemsFixture.php
Wrote `/var/www/html/tests/Fixture/SecoundItemsFixture.php`
Bake is detecting possible fixtures...

Baking test case for App\Model\Table\SecoundItemsTable ...

Creating file /var/www/html/tests/TestCase/Model/Table/SecoundItemsTableTest.php
Wrote `/var/www/html/tests/TestCase/Model/Table/SecoundItemsTableTest.php`
Done

itemsテーブルに対応するモデルがSecoundItemという名称で作成されます。

※bin/cake bake model SecoundItems –table items –no-test –no-fixtureとすれば、テストファイル抜きでモデルが作成されます。

  • /Model/Entity/SecoundItem.php
  • /Model/Table/SecoundItemsTable.php
  • /tests/Fixture/SecoundItemsFixture.php
  • /tests/TestCase/Model/Table/SecoundItemsTableTest.php

念のため、Model/Table/SecoundItem.phpの中身を確認すると、$this->setTable(‘items’)とあり、itemsテーブルがセットされていることが確認できましたので、問題ありません。

※itemsテーブルはidとnameのカラムだけ持たせています。

<?php
declare(strict_types=1);

namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

/**
 * SecoundItems Model
 *
 * @method \App\Model\Entity\SecoundItem newEmptyEntity()
 * @method \App\Model\Entity\SecoundItem newEntity(array $data, array $options = [])
 * @method \App\Model\Entity\SecoundItem[] newEntities(array $data, array $options = [])
 * @method \App\Model\Entity\SecoundItem get($primaryKey, $options = [])
 * @method \App\Model\Entity\SecoundItem findOrCreate($search, ?callable $callback = null, $options = [])
 * @method \App\Model\Entity\SecoundItem patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
 * @method \App\Model\Entity\SecoundItem[] patchEntities(iterable $entities, array $data, array $options = [])
 * @method \App\Model\Entity\SecoundItem|false save(\Cake\Datasource\EntityInterface $entity, $options = [])
 * @method \App\Model\Entity\SecoundItem saveOrFail(\Cake\Datasource\EntityInterface $entity, $options = [])
 * @method \App\Model\Entity\SecoundItem[]|\Cake\Datasource\ResultSetInterface|false saveMany(iterable $entities, $options = [])
 * @method \App\Model\Entity\SecoundItem[]|\Cake\Datasource\ResultSetInterface saveManyOrFail(iterable $entities, $options = [])
 * @method \App\Model\Entity\SecoundItem[]|\Cake\Datasource\ResultSetInterface|false deleteMany(iterable $entities, $options = [])
 * @method \App\Model\Entity\SecoundItem[]|\Cake\Datasource\ResultSetInterface deleteManyOrFail(iterable $entities, $options = [])
 */
class SecoundItemsTable extends Table
{
    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config): void
    {
        parent::initialize($config);

        $this->setTable('items');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');
    }

    /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->integer('id')
            ->allowEmptyString('id', null, 'create');

        $validator
            ->scalar('name')
            ->maxLength('name', 255)
            ->requirePresence('name', 'create')
            ->notEmptyString('name');

        return $validator;
    }
}

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

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

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

コメント

コメントする

CAPTCHA


Contents
閉じる