🔥
CodeIgniter4 addField メソッドと addColumn メソッド null キーデフォルトの違い
実行環境
- 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
これ、両者で振る舞いを変える理由がないですし、ドキュメントにも同じ配列を受けると書いてますので、バグですね。
バグ報告しておきました。
バグ報告ありがとうございます。
記事のトップに記載させていただきました。