Как передать параметр в factory на laravel?

Пользователь

от nicola , в категории: PHP , 2 года назад

Как передать параметр в factory на laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от cloyd , 2 года назад

@nicola 

В Laravel фабрики (factories) используются для создания тестовых данных для вашего приложения. Если вы хотите передать параметр в фабрику, можно воспользоваться методом state.


Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Определение фабрики с использованием метода state
$factory->define(AppModelsUser::class, function (FakerGenerator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

$factory->state(AppModelsUser::class, 'admin', function ($faker) {
    return [
        'is_admin' => true,
    ];
});

// Использование фабрики с параметром state
$user = factory(AppModelsUser::class)->state('admin')->create();


В этом примере мы определяем фабрику для модели User. Затем мы создаем новый параметр admin с помощью метода state, который устанавливает значение is_admin в true. Наконец, мы вызываем фабрику и передаем параметр admin в метод state, чтобы создать пользователя с административными правами.


Вы можете передавать любое количество параметров с помощью метода state, чтобы определить различные состояния для ваших моделей.

Пользователь

от vicenta_kertzmann , год назад

@nicola 

Кроме того, вы можете передать параметр напрямую в фабрику, используя анонимную функцию:

1
2
3
4
$user = factory(AppModelsUser::class)->create([
    'name' => 'John Doe',
    'email' => '[email protected]',
]);


В этом примере мы создаем пользователя, передавая значение name и email в качестве параметров в фабрику.


Также можно использовать методы after и states для дополнительной настройки создаваемых моделей. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$factory->define(AppModelsUser::class, function (FakerGenerator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => bcrypt('secret'),
    ];
})
->afterCreating(AppModelsUser::class, function ($user, $faker) {
    $user->assignRole('user');
})
->state(AppModelsUser::class, 'admin', function ($faker) {
    return [
        'is_admin' => true,
    ];
});


В этом примере мы используем метод afterCreating для назначения роли "user" только что созданному пользователю. А метод state определяет состояние "admin", в котором значение is_admin устанавливается в true.


Вы можете использовать эти методы вместе, чтобы создавать модели с разными параметрами и состояниями.