Laravel - Seeding Many-to-Many Relationship
You can use attach()
or sync()
method on a many-to-many relationship.
There are multiple ways you can approach this. Here one of them:
// Populate rolesfactory(App\Role::class, 20)->create();// Populate usersfactory(App\User::class, 50)->create();// Get all the roles attaching up to 3 random roles to each user$roles = App\Role::all();// Populate the pivot tableApp\User::all()->each(function ($user) use ($roles) { $user->roles()->attach( $roles->random(rand(1, 3))->pluck('id')->toArray() ); });
Another way is to use saveMany() function
public function run(){ factory(App\User::class,3)->create(); $roles = factory(App\Role::class,3)->create(); App\User::All()->each(function ($user) use ($roles){ $user->roles()->saveMany($roles); });}
Just for a seeder you can use something like this:
for ($i = 0; $i < 50; $i++) { $user = factory(App\User::class)->create(); $role = factory(App\Role::class)->create(); DB::table('role_user')->insert([ 'user_id' => $user->id, 'role_id' => $role->id ]); }
But normally you need to define relation like has many through https://laravel.com/docs/5.4/eloquent-relationships#has-many-through
Then you will be able to use:
$user->roles()->save($role);