CodeIgniter4のデータベースマイグレーション
この記事は CodeIgniter Advent Calendar 2020 - Qiita の12日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。
公式チュートリアルの news
テーブル(「MySQLでのデータベースの準備」参照)の作成をデータベースマイグレーションでできるようにしてみます。
すでに作成済みの news
テーブルは drop table してください。
Migration ファイルの作成
ファイルの作成
spark
コマンドでファイルの雛形を作成します。
$ php spark migrate:create create_table_news
app/Database/Migrations/2020-12-11-103902_create_table_news.php
のようなファイルができました。
app/Database/Migrations/2020-12-11-103902_create_table_news.php
<?php namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class CreateTableNews extends Migration
{
public function up()
{
//
}
//--------------------------------------------------------------------
public function down()
{
//
}
}
中身の記述
up()
と down()
メソッドを記述します。
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class CreateTableNews extends Migration
{
public function up()
{
$this->forge->addField(
[
'id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
'auto_increment' => true,
],
'title' => [
'type' => 'VARCHAR',
'constraint' => '128',
'null' => false,
],
'slug' => [
'type' => 'VARCHAR',
'constraint' => '128',
'null' => false,
],
'body' => [
'type' => 'TEXT',
'null' => false,
],
]
);
$this->forge->addPrimaryKey('id');
$this->forge->createTable('news');
}
//--------------------------------------------------------------------
public function down()
{
$this->forge->dropTable('news');
}
}
マイグレーションの実行
マイグレーションを実行します。
$ php spark migrate
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-12-11 19:53:00pm
すべての新しいマイグレーションを実行しています...
実行中: (App) 2020-12-11-103902_App\Database\Migrations\CreateTableNews
Done
作成されたテーブルの確認
news テーブル
mysql
コマンドで MySQL に接続して確認してみます。
mysql> desc news;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(128) | NO | | NULL | |
| slug | varchar(128) | NO | | NULL | |
| body | text | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
良さそうですね。
migrations テーブル
CodeIgniter が migration 情報を保存する migrations
テーブルも確認しておきましょう。
mysql> select * from migrations \G
*************************** 1. row ***************************
id: 1
version: 2020-12-11-103902
class: App\Database\Migrations\CreateTableNews
group: default
namespace: App
time: 1607683980
batch: 1
1 row in set (0.02 sec)
この記事は CodeIgniter Advent Calendar 2020 - Qiita の12日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。
参考
Date: 2020/12/12