🔥

CodeIgniter4 addField メソッドと addColumn メソッド null キーデフォルトの違い

2023/02/09に公開2

実行環境

  • CodeIgniter 4.2.12
  • PostgreSQL 9.2

動作確認

app\Database\Migrations\2023-02-07-130000_CreateTableTestTable.php
<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateTableTestTable extends Migration
{
    public function up()
    {
        $this->forge->addField(
            [
                'column1' => [
                    'type' => 'VARCHAR',
                ],
                'column2' => [
                    'type' => 'VARCHAR',
                    'null' => true,
                ],
                'column3' => [
                    'type' => 'VARCHAR',
                    'null' => false,
                ],
            ]
        );
        $this->forge->createTable('test_table');
    }

    public function down()
    {
        $this->forge->dropTable('test_table');
    }
}
app\Database\Migrations\2023-02-07-133000_AddColumnToTestTable.php
<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class AddColumnToTestTable extends Migration
{
    public function up()
    {
        $this->forge->addColumn('test_table', [
            'column4' => [
                'type' => 'VARCHAR',
            ],
            'column5' => [
                'type' => 'VARCHAR',
                'null' => true,
            ],
            'column6' => [
                'type' => 'VARCHAR',
                'null' => false,
            ],
        ]);
    }

    public function down()
    {
        $this->forge->dropColumn('test_table', [
            'column4',
            'column5',
            'column6',
        ]);
    }
}

確認結果

SELECT column_name, is_nullable, data_type
FROM information_schema.columns
WHERE table_name = 'test_table'
ORDER BY ordinal_position;
column_name	is_nullable	data_type
column1		NO		character varying
column2		YES		character varying
column3		NO		character varying
column4		YES		character varying
column5		YES		character varying
column6		NO		character varying

Database Forge Class の addField() メソッドと addColumn() メソッドでは
NOT NULL 制約を定義する null キーのデフォルト値が逆となっている為、注意が必要である。

  • addField() : null キーを指定しない場合、デフォルトで NOT NULL 制約を追加する。
  • addColumn() : null キーを指定しない場合、デフォルトで NOT NULL 制約を追加しない。

参考

Discussion