Ogólnie to nie musisz korzystać z factory w seederze, a wywołać model bezpośrednio przez fasadę.
Wypełniasz przykładowo tabelę users.
Później wypełniasz tabelę przykładowo roles.
Później przypisujesz roles do users:
$user = App\User::find(1);
$user->roles()->attach($roleId);
Jak chcesz mieć dodatkowe dane w tabeli łączącej users_roles to dodajesz je w drugim parametrze:
$user->roles()->attach($roleId, ['expires' => $expires]);
Wszystko jest w dokumentacji:
https://laravel.com/docs/5.7/eloquent-relationships#updating-many-to-many-relationships
$user->roles()->attach([
1 => ['expires' => $expires],
2 => ['expires' => $expires]
]);
Powyżej przypisanie wielu rekordów na raz do usera.
Poniżej przykład z factory:
factory(App\User::class, 50)->create()->each(function ($user) {
$posts = factory(App\Post::class, 10)->create();
$user->posts ()->attach($posts->pluck('id')->toArray());
});
Jest tutaj wiele do wielu, z tym, że dla każdego usera i tak są tworzone nowe posty, ale przypisanie jest w pivocie.