В настоящее время я изучаю Laravel 5.8 и создал базу данных, в которой users
может иметь две роли: admin
или user
, хранящиеся в таблице roles
.Я пытался заполнить промежуточную таблицу role_users
, но Laravel удваивает строки и отбрасывает неверные данные, например: Сумасшедшая таблица ROLE_USER .role_id
должно быть только 1 или 2. user_id
должно быть уникальным.Что я сделал не так?
Модель пользователя:
public function roles() {
return $this->belongsToMany('App\Role', 'role_users')->withTimestamps();
}
Ролевая модель:
public function roles() {
return $this->belongsToMany('App\User', 'role_users')->withTimestamps();
}
create_role_users_table миграция:
Schema::create('role_users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('user_id');
$table->timestamps();
});
RoleUsersFactory factory:
$factory->define(RoleUser::class, function (Faker $faker) {
return [
'role_id' => Role::all()->random()->id,
'user_id' => User::all()->random()->id,];
});
Сеялка RoleTableSeeder:
$role_user = new Role();
$role_user->role = 'user';
$role_user->save();
$role_admin = new Role();
$role_admin->role = 'admin';
$role_admin->save();
Сеялка DatabaseSeeder:
$this->call(RoleTableSeeder::class);
factory(User::class, 5)->create()->each(function($user) {
$user->roles()->save(factory(RoleUser::class)->make());
});