【发布时间】:2019-08-31 10:33:18
【问题描述】:
我目前使用 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();
}
}
表角色_用户迁移:
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 = 'user@example.com';
$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 = 'admin@example.com';
$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是干什么用的?对我来说它看起来很好...... -
我只是删掉了一些行以保持代码简洁。 :)
标签: php laravel eloquent laravel-5.8