Laravel - 播种多对多关系

标签 laravel laravel-5 factory faker laravel-seeding

我有一个 users 表和一个 roles 具有 的表多对多 关系。这两个表连接到一个名为 的连接表。 role_user .
This is a model of the tables and its connections.
以下是我的 Laravel 项目中的模型:
用户
namespace App; use Illuminate\Database\Eloquent\Model; class User 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->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 table ? (我没有连接表的模型文件。)
我对此很陌生,因此任何帮助将不胜感激。谢谢。

最佳答案

您可以使用 attach() or sync() method在多对多关系上。

有多种方法可以解决这个问题。这是其中之一:

// 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()
    ); 
});

关于Laravel - 播种多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269146/

相关文章:

c++ - 基于不同枚举类值 union 的模板工厂

php - 拉拉维尔 : Issue in database connection when use # keyword in env file

php - 如何从 Laravel 4.2 中不同表中的类别值中查找类别名称?

php - 在 Laravel5 中查询与条件的关系?

c++ - 我可以抽象出有关模板类的具体细节吗?

coding-style - 如何命名类似工厂的方法?

javascript - 使用 Sweetalert、Javascript 和 Laravel 创建确认按钮

php - 拉拉维尔 5 : cascade soft delete

php - Laravel 中的路由是否带有正斜杠?

php - Laravel Eloquent 地与Trashed关系