LoginSignup
4
4

More than 3 years have passed since last update.

【laravel】シーディングによるレコードの追加

Last updated at Posted at 2020-05-07

概要

シーディングはデータベースを管理する機能の1つで、データベース構築時にダミーデータや初期データを作成するために使われます。
生成したい内容をクエリビルダで作成することにより、自動でレコードを生成することができます。

シーディングは以下のような段階で構成されます。
1.シーディングのためのシーダークラスを作成する。
2.シーディングコマンドを実行する。

シーダークラスの作成

ここでは前回の【laravel】マイグレーションで作成したSampleテーブルの内容を例に記述していきます。

コマンド

マイグレーションのファイルはartisanコマンドで作成します。
ファイル名(クラス名)の指定はありませんが、テーブル名と合わせた名前でシーダーファイルを作成していきます。

コマンド
php artisan make:seeder SampleTabaleSeeder

ディレクトリ構造

database\seeds内にコマンドで作成したファイル名のファイルが作成されます。

ディレクトリ
database
├─ seeds
   ├─ SampleTabaleSeeder.php

作成されるファイル

artisanコマンドで作成した場合は以下のような内容が自動で作成されます。
Illuminate\Database\Seederクラスを継承したシーダークラスとなっています。
シーダーファイルにはvoid型のrunメソッドが用意されており、ここに処理を記述していきます。

SampleTabaleSeeder.php
<?php

use Illuminate\Database\Seeder;

class SampleSeeder extends Seeder
{
  /**
   * Run the database seeds.
   *
   * @return void
   */
  public function run()
  {
    //
  }
}

シーダーの作成

ダミーレコードを作成します。
ここではクエリビルダで記述するため、DBファサードをuseします。
また、idはオートインクリメントのため省略して記述していきます。

クリエビルダについては【laravel】データベースの操作 / クリエビルダによる操作をご参考ください。

SampleTabaleSeeder.php
use Illuminate\Support\Facades\DB;
SampleTabaleSeeder.php
public function run() {
  $param = [
    'name' => 'サンプル太郎',
    'tel' => '09012345678',
    'address' => '〇〇県☓☓市',
    'wmail' => 'taro_sample@mail.com',
    'is_experience' => 1,
];
DB::table('people')->insert($param);

// 中略...

// 記述方法:DB::table('テーブル名')->insert(パラメータ);
}

シーディングの準備

シーダークラスを作成したので、シーディングを実行してレコードを生成します。
そのためにはDatabaseSeederで実効するシーダークラスを指定する必要があります。
DatabaseSeederはdatabase\seedsにデフォルトで用意されています。

ディレクトリ構造

database\seedsにデフォルトで用意されています。

ディレクトリ
database
├─ seeds
   ├─ DatabaseSeeder.php

DatabaseSeederファイルの中身

作成したシーダークラスと同じくSeederクラスを継承したクラスとなっています。
runメソッドに実効するシーダークラスを指定します。
シーダークラスと同じメソッドなのでコメント部分は割愛します。

DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
  public function run()
  {
    // $this->call(UsersTableSeeder::class);
  }
}

シーダークラスの登録

runメソッドにcallメソッドを記述します。
callメソッドは実行するシーダークラスを引数にして記述します。

DatabaseSeeder.php
public function run()
{
  $this->call(SampleTableSeeder::class);
}

シーディングの実行

シーダークラスを作成してDatabaseSeederへ登録できれば準備は完了で、あとはシーディングを実行するだけです。
シーディングの実行はコマンドで行います。
指定のテーブルにレコードが生成されていればシーディングは完了です。

コマンド
php artisan db:seed

補足

シーディングはマイグレーションと異なり、重複の確認は行いません。
実行済みのシーダークラスも再度シーディングを実行すれば再度生成されるため、実行済みのシーダークラスはコメントアウトするなどしてデータベースが汚くならないように工夫することをおすすめします。

参考

データベース:シーディング
【PHP/Laravel入門】動作チェックに便利なシーディング使い方まとめ

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4