Step 01: running artisan command to create question factory, seeder, migration and model files
php artisan make:model Question -mfs
Step 02: Setting up QuestionFactory.php
namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; /** * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Poll> */ class QuestionFactory extends Factory { /** * Define the model's default state. * * @return array mixed> */ public function definition() { return [ 'title' => $this->faker->sentence, ]; } }
Step 03: Setting up QuestionSeeder.php
namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class PollSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // Poll & Question \App\Models\Poll::factory(10)->create()->each( function($p) { $p->questions()->saveMany( \App\Models\Question::factory(rand(1,5))->make() ); }); } }
Step 04: Setting up question migration file
public function up() { Schema::create('questions', function (Blueprint $table) { $table->id(); $table->string('title'); $table->integer('poll_id'); $table->foreign('poll_id')->references('id')->on('polls'); $table->timestamps(); }); }
Step 05: Setting up modal Question.php
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Question extends Model { use HasFactory; protected $fillable = [ 'title', 'poll_id' ]; }
Step 06: Setting up UserSeeder.php
namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class UserSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { \App\Models\User::factory(10)->create(); } }
Step 07: Changing DatabaseSeeder.php from previous setup
namespace Database\Seeders; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call([ //PollSeeder::class UserSeeder::class, QuestionSeeder::class ]); } }
Step 08: Running artisan command for seeding new set of poll and question data
php artisan migrate:fresh --seed