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 ファイルの作成
ファイルの作成
spark の make: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



![徹底攻略PHP5技術者認定[上級]試験問題集  [PJ0-200]対応 徹底攻略PHP5技術者認定[上級]試験問題集  [PJ0-200]対応](http://tatsu-zine.com/images/books/164/cover_s.jpg)

