はじめに
原則としては内部向けですが、自分もはまった経験がある部分なので、もしかしたら役に立つかもしれないので公開します。(CodeIgniter3以下でも基本は同じですが、関数名の変更があるので注意してください:例えばCI3までは add_field
→ CI4 では addField
)
データベース管理の流れ
CodeIgniter4のデータベース管理の流れを整理してまとめておきます。
php spark migrate:create <管理ファイル名>
- 管理ファイルを編集して
up
にアップデート内容を記述 - 管理ファイルを編集して
down
にアップデートを戻す内容を記述 -
php spark migrate
で完了! -
php spark db:table
などで変更内容を確認
migrate:create
で管理ファイル名の連番オプションを変更することも可能なので、プロジェクトで統一して管理してください。(例えば --suffix
で <日付-管理ファイル名>
の形でマイグレーションファイルが生成されます)ちなみに migrate:create
を使わなくてもマイグレーションファイルを作れますが、管理面からこれを使っておいたほうが良いです。
使う関数
-
$this->forge->addField([...])
→ フィールドの追加 -
$this->forge->dropField([...])
→ フィールドの追加 -
$this->forge->addKey('<カラム名>')
→ インデックスの追加 -
$this->forge->createTable('<テーブル名>')
→ テーブルの作成 -
$this->forge->dropTable('<テーブル名>')
→ テーブルの削除 -
$this->forge->addColumn('<テーブル名>', [...])
→ カラムの追加 -
$this->forge->dropColumn('<テーブル名>', [...]);
→ カラムの削除 -
$this->forge->modifyColumn('<テーブル名>', [...])
→ カラムの定義変更
[...]
にカラム定義を配列の形で入れて、基本的には以下の関数を使ってデータベースを管理しますが、既に作成されたテーブルに対して addField
を適用しようとするとエラーになります。既に存在するテーブルに対してカラムの追加を行う場合は addColumn
を適用してください。
変数定義
上記 [...]
に代入する配列内のカラム定義の例は以下のようになります。配列は変数として与えることもできます。
'<カラム1>' => [
'type' => '<変数型>',
'constraint' => '文字数',
... <続く> ...
],
'<カラム2>' => [
'type' => '<変数型>',
'constraint' => '文字数',
... <続く> ...
],
... <続く> ...
補足
SQLAlchemyなど、DERaCで主に使っているPythonフレームワークのデータベース管理ではデータベースモデルのファイルを編集してマイグレーションコマンドを打ち込むとマイグレーションファイルが自動的に作成される形になります。CIの場合、モデルの定義はマイグレーションファイルで直接管理して、モデル定義ではデータベース操作を定義する構造になります。