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