Laravelのシーディングを徹底解説
目次
はじめに
本記事では、Laravelのシーディング(Seeding)機能の使い方をわかりやすく解説していきます。
チュートリアルの全体像
本チュートリアルを通じて学べる内容は以下のようになります。
- Laravelの開発環境セットアップ
- Laravel Breezeで認証機能を導入
- Laravelのルーティングを徹底解説
- Laravelのコントーラーを徹底解説
- Laravelのブレイドを使ってみよう
- マイグレーションの仕組みを解説
- シーディングを使ってみよう
- Eloquentの基本と使い方を徹底解説
- 画像アップロードを実装する方法
- バリデーションを実装してみよう
- 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モデルについてです。
この記事へのコメントはありません。