在 Laravel 上为用户 table 播种的参数不匹配

Parameter mismatch for seeding the users table on Laravel

我正在尝试在 Laravel 5.2 上为用户 table 播种。我有一个名为 role 的自定义列。我正在使用 Faker 为用户播种 table。但是,我需要用管理员或客户填充 role 列。所以,我传递了一个数组并返回了参数不匹配错误。

这是我正在尝试的相关代码:

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => 123456,
        'role' => ['Administrator', 'Customer'],
        'remember_token' => str_random(10),
    ];
})

我知道它只接受字符串而不是数组。那么,当你想用多个特定数据为数据库播种时,你该怎么做。

我建议使用随机索引生成(在您的情况下为 0 或 1)并通过该索引从可能值数组 (['Administrator', 'Customer']) 中检索值。

$i = rand(0, 1);
$roleOptions = ['Administrator', 'Customer'];
$role = $roleOptions[$i];

此外,如果您希望拥有比管理员更多的用户,您可以查找类似这样的内容:changing probability of getting a random number

您可以使用Faker获取随机元素:

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => 123456,
        'role' => $faker->randomElement(['Administrator', 'Customer']),
//                 ^^^^^^^ here ^^^^^^^
        'remember_token' => str_random(10),
    ];
})