作者:眼睛Blank | 来源:互联网 | 2023-01-28 17:48
我有一张users
表和一张roles
表有多对多关系的表.这两个表连接到一个名为的联结表role_user
.
这是表及其连接的模型.
以下是我的Laravel项目中的模型:
用户
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
角色
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User');
}
}
以下是Laravel项目中的Factory文件:
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
];
});
$factory->define(App\Role::class, function (Faker\Generator $faker) {
return [
'role' => $faker->realText($maxNbChars = 2),
'description' => $faker->realText($maxNbChars = 20),
];
});
下面是Laravel项目中的种子文件:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->roles()->save(factory(App\Role::class)->make());
});
factory(App\Role::class, 20)->create()->each(function ($u) {
$u->users()->save(factory(App\User::class)->make());
});
}
这应该填充users
表和roles
表,但我如何填充role_user
表?(我没有联结表的模型文件.)
我对此很新,所以任何帮助都会受到赞赏.谢谢.
1> peterm..:
您可以在多对多关系上使用attach()
或sync()
使用方法.
有多种方法可以解决这个问题.其中一个:
// Populate roles
factory(App\Role::class, 20)->create();
// Populate users
factory(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 table
App\User::all()->each(function ($user) use ($roles) {
$user->roles()->attach(
$roles->random(rand(1, 3))->pluck('id')->toArray()
);
});
2> 小智..:
另一种方法是使用saveMany()函数
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);
});
}