阵列工厂Laravel上的随机选择值

Ngu*_*inh 14 laravel-5

我有用户迁移:

$table->enum('type',['seller','buyer'])->default('seller');
Run Code Online (Sandbox Code Playgroud)

我想在使用ModelFactory时如何获得随机价值卖家或买家?

$factory->define(App\User::class, function (Faker\Generator $faker) {

    static $password;

    return [
        'firstName' => $faker->name,
        'lastName' => $faker->name,
        'username' => $faker->unique()->username,
        'email' => $faker->unique()->safeEmail,
        'password' => md5('user123'),
        'bio' => $faker->sentence(3, true),
        'type' => ???,
    ];
});
Run Code Online (Sandbox Code Playgroud)

San*_*esh 38

利用randomElement方法

'type' => $faker->randomElement(['seller', 'buyer']),
Run Code Online (Sandbox Code Playgroud)


Use*_*356 5

Laravel 版本 >= 5.6

use Illuminate\Support\Arr;

$array = [1, 2, 3, 4, 5];

$random = Arr::random($array);

// 4 - (retrieved randomly)

"type" => Arr::random($array);
Run Code Online (Sandbox Code Playgroud)


Ami*_*oud 5

万一有人正在使用较新版本的 Laravel 和 PHP 寻找这个问题的答案,您可以enum像这样使用 PHP 中的:

<?php

namespace App\Enums;

enum UserTypeEnum: string
{
    case SELLER = 'seller';
    case BUYER = 'buyer';
}
Run Code Online (Sandbox Code Playgroud)

然后你的工厂将如下所示:

<?php

namespace Database\Factories;

use App\Enums\UserTypeEnum;
use Illuminate\Database\Eloquent\Factories\Factory;

class TaskFactory extends Factory
{
    public function definition()
    {
        return [
            'firstName' => fake()->firstName,
            'lastName' => fake()->lastName,
            'username' => fake()->unique()->username,
            'email' => fake()->unique()->safeEmail,
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password,
            'bio' => fake()->sentence(3, true),
            'type' => fake()->randomElement(UserTypeEnum::cases()),
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

而且,如果您的type专栏是,您也可以拥有类似的nullable播种机。typefake()->randomElement([...UserTypeEnum::cases(), null])