Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

artisticre's avatar

RoleUserSeeder help

I have this roleuserseeder that is assigning random roles to users. How can I change this to assign a certain role to each user?

RoleUserSeeder

<?php

namespace Database\Seeders;

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

class RoleUserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $roles = Role::all();

        User::all()->each(function ($user) use ($roles){
            $user->roles()->attach(
                $roles->random(1)->pluck('id')
            );
        });
    }
}

UserSeeder

<?php

namespace Database\Seeders;

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

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'Registrar',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'Webmaster',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'Team',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'Sponsor',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'Pastor',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'Pilgrim',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);

        DB::table('users')->insert([
            'name' => 'User',
            'email' => '[email protected]',
            'password' => Hash::make('password'),
        ]);
    }
}

RoleSeeder

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Role;
use DB;

class RoleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
       DB::table('roles')->insert([
           'name' => 'Registrar'
       ]);

       DB::table('roles')->insert([
        'name' => 'Webmaster'
       ]);

       DB::table('roles')->insert([
        'name' => 'Team'
       ]);

       DB::table('roles')->insert([
        'name' => 'Pastor'
       ]);

       DB::table('roles')->insert([
        'name' => 'Sponsor'
       ]);

       DB::table('roles')->insert([
        'name' => 'Pilgrim'
       ]);

       DB::table('roles')->insert([
        'name' => 'User'
       ]);



    }
}

0 likes
3 replies
tykus's avatar

What do you mean by a certain role to each User?

artisticre's avatar

in the user seeder I have for instance team as a user. then in roles table I have a team role. in the roleuser seeder I am not attaching those correctly I know. It just assigns random roles to team

tykus's avatar

Just make a single seeder which puts the User and Role records in the database together.

$roles = [
	'Registrar',
	'Webmaster',
	'Team',
	'Pastor',
	'Sponsor',
	'Pilgrim',
	'User',
];

collect($roles)->each(function ($role) {
	$user = User::create([
		'name' => $role,
		'email' => Str::of($role)->lower()->append('@example.com'),
		'password' => Hash::make('password')
	]);
	$user->roles()->create(['name' => $role]);
});

You don't need a Seeder per database table.

Please or to participate in this conversation.