Как в Laravel в Factory передать доп атрибуты?

В Laravel, вы можете передать дополнительные атрибуты в фабрику (Factory) с использованием метода state.

state позволяет задать дополнительные атрибуты для создаваемых моделей в фабрике. Дополнительные атрибуты могут быть определены с помощью анонимной функции или массива.

Сначала определим фабрику для модели. Допустим, у нас есть модель User и мы хотим задать дополнительные атрибуты для создания пользователей:

use AppUser;
use IlluminateDatabaseEloquentFactoriesFactory;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'password' => bcrypt('password'),
        ];
    }
}

Теперь, чтобы передать дополнительные атрибуты в фабрику, мы можем использовать метод state. Вот пример:

$user = User::factory()->state(function (array $attributes) {
    return [
        'is_admin' => true,
        'role' => 'admin',
    ];
})->create();

В данном примере мы добавляем два дополнительных атрибута is_admin и role в модель User. Мы используем анонимную функцию, чтобы вернуть массив с дополнительными атрибутами.

Также можно использовать метод state с массивом:

$user = User::factory()->state([
    'is_admin' => true,
    'role' => 'admin',
])->create();

Оба способа дают одинаковый результат.

Если вам нужно передать дополнительные атрибуты в уже существующий фабрик state, вы можете использовать метод for():

$admin = User::factory()->state('admin')->for($user)->create();

В данном примере мы используем уже существующий фабрик state с названием admin и используем метод for() для передачи модели $user, чтобы привязать администратора к этому пользователю.

Надеюсь, эта информация помогла вам!