Laravel 8.x データベース:シーディング

イントロダクション

Laravelは、シードクラスを使用してデータベースにテストデータをシード(種をまく、初期値の設定)する機能を持っています。すべてのシードクラスはdatabase/seedersディレクトリに保存します。デフォルトで、DatabaseSeederクラスが定義されています。このクラスから、callメソッドを使用して他のシードクラスを実行し、シードの順序を制御できます。

Tip!! 複数代入は、データベースのシード中では自動的に無効になります。

シーダクラス定義

シーダを生成するには、make:seeder Artisanコマンドを実行します。フレームワークが生成するシーダはすべてdatabase/seedersディレクトリに設置します。

php artisan make:seeder UserSeeder

シーダクラスには、デフォルトで1つのメソッド、runのみ存在します。このメソッドは、db:seed Artisanコマンドが実行されるときに呼び出されます。runメソッド内で、データベースにデータを好きなように挿入できます。クエリビルダを使用してデータを手動で挿入するか、Eloquentモデルファクトリを使用できます。

例として、デフォルトのDatabaseSeederクラスを変更し、データベース挿入文をrunメソッドに追加しましょう。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;

class DatabaseSeeder extends Seeder
{
    /**
     * データベースに対するデータ設定の実行
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => Hash::make('password'),
        ]);
    }
}

Tip!! runメソッドの引数として、タイプヒントにより必要な依存を指定できます。それらはLaravelのサービスコンテナが自動的に依存解決します。

モデルファクトリの利用

当然それぞれのモデルシーダで属性をいちいち指定するのは面倒です。代わりに大量のデータベースレコードを生成するのに便利なモデルファクトリが使用できます。最初にモデルファクトリのドキュメントを読んで、どのように定義するのかを学んでください。

例として、それぞれに1つの関連する投稿がある50人のユーザーを作成しましょう。

use App\Models\User;

/**
 * データベースに対するデータ設定の実行
 *
 * @return void
 */
public function run()
{
    User::factory()
            ->count(50)
            ->hasPosts(1)
            ->create();
}

追加のシーダ呼び出し

DatabaseSeederクラス内で、callメソッドを使用して追加のシードクラスを実行できます。callメソッドを使用すると、データベースのシードを複数のファイルに分割して、単一のシーダークラスが大きくなりすぎないようにできます。callメソッドは、実行する必要のあるシーダークラスの配列を引数に取ります。

/**
 * データベースに対するデータ設定の実行
 *
 * @return void
 */
public function run()
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

シーダの実行

db:seed Artisanコマンドを実行して、データベースに初期値を設定します。デフォルトでは、db:seedコマンドはDatabase\Seeders\DatabaseSeederクラスを実行します。このクラスから他のシードクラスが呼び出される場合があります。ただし、--classオプションを使用して、個別に実行する特定のシーダークラスを指定できます。

php artisan db:seed

php artisan db:seed --class=UserSeeder

migrate:freshコマンドを--seedオプションと組み合わせて使用​​してデータベースをシードすることもできます。これにより、すべてのテーブルが削除され、すべてのマイグレーションが再実行されます。このコマンドは、データベースを完全に再構築するのに役立ちます。

php artisan migrate:fresh --seed

実働環境でのシーダの強制実行

一部のシード操作により、データが変更または失われる場合があります。本番データベースに対してシードコマンドを実行しないように保護するために、production環境でシーダーを実行する前に確認を求めるプロンプトが表示されます。シーダーをプロンプトなしで強制的に実行するには、--forceフラグを使用します。

php artisan db:seed --force

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる