CodeIgniter4のデータベースシーダー

この記事は CodeIgniter Advent Calendar 2020 - Qiita の13日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

公式チュートリアルの news テーブル(「MySQLでのデータベースの準備」参照)に入れるサンプルデータを、CodeIgniter4 のデータベースシーダーを使って追加できるようにしてみます。

CodeIgniter4 開発版への変更

CodeIgniter 4.0.4 には含まれていないシーダーを作成するコマンドが、最新の開発版には含まれているため、CodeIgniter4 を一時的に開発版に変更します。

(2021/02/23追記) CodeIgniter 4.0.5以降にはシーダーを作成するコマンドが含まれています。

$ php builds development
$ composer update

詳細は、「CodeIgniter4を一時的に開発版に変更する」を参照してください。

Seeder ファイルの作成

ファイルの作成

sparkmake:seeder コマンドでファイルの雛形を作成します。ヘルプを確認します。

$ php spark help make:seeder

CodeIgniter v4.0.4 Command Line Tool - Server Time: 2020-12-13 09:22:11 UTC+09:00

使用法:
  make:seeder <name> [options]

説明:
  Creates a new seeder file.

引数:
  name  The seeder file name

オプション:
  -n       Set root namespace. Defaults to APP_NAMESPACE.
  --force  Force overwrite existing files.

それでは作成します。

$ php spark make:seeder NewsSeeder
CodeIgniter v4.0.4 Command Line Tool - Server Time: 2020-12-13 09:26:07 UTC+09:00

作成されたファイル: APPPATH/Database/Seeds/NewsSeeder.php

app/Database/Seeds/NewsSeeder.php ファイルができました。

app/Database/Seeds/NewsSeeder.php

<?php

namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;

class NewsSeeder extends Seeder
{
    public function run()
    {
        //
    }
}

中身の記述

run() メソッドを記述します。

<?php

namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;

class NewsSeeder extends Seeder
{
    public function run()
    {
        $data = [
            [
                'title' => 'Elvis sighted',
                'slug' => 'elvis-sighted',
                'body' => 'Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app.',
            ],
            [
                'title' => 'Say it isn\'t so!',
                'slug' => 'say-it-isnt-so',
                'body' => 'Scientists conclude that some programmers have a sense of humor.',
            ],
            [
                'title' => 'Caffeination, Yes!',
                'slug' => 'caffeination-yes',
                'body' => 'World\'s largest coffee shop open onsite nested coffee shop for staff only.',
            ]
        ];

        $this->db->table('news')->insertBatch($data);
    }
}

シーダーの実行

作成した NewsSeeder を実行します。

$ php spark db:seed NewsSeeder
CodeIgniter v4.0.4 Command Line Tool - Server Time: 2020-12-13 09:36:41 UTC+09:00

Seeded: App\Database\Seeds\NewsSeeder

挿入されたデータの確認

news テーブル

mysql コマンドで MySQL に接続して確認してみます。

mysql> select * from news \G
*************************** 1. row ***************************
   id: 1
title: Elvis sighted
 slug: elvis-sighted
 body: Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app.
*************************** 2. row ***************************
   id: 2
title: Say it isn't so!
 slug: say-it-isnt-so
 body: Scientists conclude that some programmers have a sense of humor.
*************************** 3. row ***************************
   id: 3
title: Caffeination, Yes!
 slug: caffeination-yes
 body: World's largest coffee shop open onsite nested coffee shop for staff only.
3 rows in set (0.01 sec)

挿入されています。

この記事は CodeIgniter Advent Calendar 2020 - Qiita の13日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

Date: 2020/12/13

Tags: codeigniter, codeigniter4, database