В настоящее время я работаю с Laravel 5.8, и в моей базе данных есть таблица users
и таблица roles
, которые связаны отношениями многие ко многим. Я намерен заполнить всю базу данных за один раз, используя php artisan migrate:fresh --seed
, однако сводная таблица role_user
всегда пуста, что говорит о том, что с подключением / синхронизацией что-то не так. Я намереваюсь реализовать больше отношений "многие-ко-многим", поэтому я хочу полностью понять, как заполнять эти отношения с помощью сидеров и фабрик.
Как я могу создать отношения "многие ко многим" и быстро проверить, правильно ли эти отношения работают?
Модель пользователя:
class User extends Authenticatable
{
//Default variables generated by Laravel
public function roles()
{
return $this->belongsToMany('App\Role', 'role_user')->withTimestamps();
}
}
Ролевая модель:
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User', 'role_user')->withTimestamps();
}
}
Таблица миграции role_user:
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
}
Роль сеялки:
public function run()
{
$role_user = new Role();
$role_user->role = 'user';
$role_user->save();
$role_admin = new Role();
$role_admin->role = 'admin';
$role_admin->save();
}
Пользовательская сеялка:
public function run()
{
$faker = Faker\Factory::create();
$role_user = Role::where('role','=','user')->first();
$role_admin = Role::where('role','=','admin')->first();
//Generic user account for testing
$test_user = new User();
$test_user->username = 'user';
$test_user->email = '[email protected]';
$test_user->email_verified_at = now();
$test_user->password = 'user';
$test_user->remember_token = Str::random(10);
$test_user->save();
$test_user->roles()->attach($role_user);
//Generic admin account for testing
$test_admin = new User();
$test_admin->username = 'admin';
$test_admin->email = '[email protected]';
$test_admin->email_verified_at = now();
$test_admin->password = 'admin';
$test_admin->remember_token = Str::random(10);
$test_admin->save();
$test_admin->roles()->attach($role_admin);
}
$faker
? А по мне это выглядит нормально ... - person Namoshek   schedule 10.04.2019