Seeding Question data for a poll

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

Related Posts


Building RESTful APIs in Laravel

Seeding Poll data

Pagination for poll in restful api

Uploading image in restful api