1. HOME
  2. ブログ
  3. エンジニアリング
  4. Laravelのシーディングを徹底解説

BLOG

ブログ

エンジニアリング

Laravelのシーディングを徹底解説

はじめに

本記事では、Laravelのシーディング(Seeding)機能の使い方をわかりやすく解説していきます。

チュートリアルの全体像

本チュートリアルを通じて学べる内容は以下のようになります。

  1. Laravelの開発環境セットアップ
  2. Laravel Breezeで認証機能を導入
  3. Laravelのルーティングを徹底解説
  4. Laravelのコントーラーを徹底解説
  5. Laravelのブレイドを使ってみよう
  6. マイグレーションの仕組みを解説
  7. シーディングを使ってみよう
  8. Eloquentの基本と使い方を徹底解説
  9. 画像アップロードを実装する方法
  10. バリデーションを実装してみよう
  11. Laravelで認可処理を実装しよう

動画で学びたい方はこちらから!

解説

Laravelのシーディング(Seeding)とは?

シード(Seed)という英語は、種をまくという意味です。
Laravelのシードとは、テストデータをデーターベースに入れることです。テストデータをまくということですね。
実際のアプリケーション開発では、大量のデータが必要になることも少なくないです。その時に、いちいち手でデータを一つづつ作っていくのは骨が折れます。そこで、Laravelのシーディングという機能を使って一気にデータを入れてしまおうというわけです。

それでは、さっそくシーディングを使っていきましょう!

実践

シーダクラスを作成

php artisan make:seeder UserSeeder
php artisan make:seeder PostSeeder
php artisan make:seeder CommentSeeder

シーディングロジック作成

database/seeders/UserSeeder.php

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $names = [
            't.tanaka',
            's.suzuki',
            'i.ito',
            's.sato',
            'h.hayashi',
            'm.matsumoto',
            'k.kobayashi',
            'n.naito',
            'k.kimura',
            't.tamura',
        ];

        foreach ($names as $name) {
            $imageNumbers = range(1, 16);
            $imageNumber = $imageNumbers[array_rand($imageNumbers)];

            User::factory()->create([
                'name' => $name,
                'email' => "{$name}@example.com",
                'icon' => "/dogs/dog_{$imageNumber}.jpg",
                'description' => 'はじめまして。よろしくお願いします。',
            ]);
        }
    }
}

database/seeders/PostSeeder.php

<?php

namespace Database\Seeders;

use App\Models\Post;
use App\Models\User;
use Illuminate\Database\Seeder;

class PostSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $users = User::all();
        foreach ($users as $user) {
            $imageNumbers = range(1, 16);
            shuffle($imageNumbers);
            $imageNumbers = array_slice($imageNumbers, 0, 5);
            foreach ($imageNumbers as $imageNumber) {
                Post::create([
                    'image_path' => "/dogs/dog_{$imageNumber}.jpg",
                    'caption' => 'かわいいワンちゃん🐶',
                    'user_id' => $user->id,
                ]);
            }
        }
    }
}

database/seeders/CommentSeeder.php

<?php

namespace Database\Seeders;

use App\Models\Comment;
use App\Models\Post;
use App\Models\User;
use Illuminate\Database\Seeder;

class CommentSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $comments = [
            'かわいい😍',
            '可愛い❤️',
            'すてき👏',
            '素敵✨',
            'ナイス🙌',
            'いいね👍',
            '👏👏👏',
            '🎉🎉🎉',
            '🍾🍾🍾',
            '🙌🙌🙌',
        ];
        $posts = Post::all();
        $users = User::all();
        foreach ($posts as $post) {
            foreach ($users as $user) {
                Comment::create([
                    'text' => $comments[array_rand($comments)],
                    'user_id' => $user->id,
                    'post_id' => $post->id,
                ]);
            }
        }
    }
}

DatabaseSeederに登録

database/seeders/DatabaseSeeder.php

<?php

namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            UserSeeder::class,
            PostSeeder::class,
            CommentSeeder::class,
        ]);
    }
}

シーディング実行

php artisan db:seed

まとめ

以上、シーディングについてでした。

次は、Eloquentモデルについてです。

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事