РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1242 of 1392 menu

Метод sequence

Метод sequence применяется к фабрике Eloquent-модели и позволяет переопределять значения атрибутов для каждого создаваемого экземпляра в виде последовательности. Метод принимает массив или замыкание, которое возвращает значение для текущей позиции в последовательности. Это особенно полезно при тестировании, когда необходимо создать несколько записей с различными, но предсказуемыми значениями полей.

Синтаксис

<?php Factory::sequence($values); ?>

Метод sequence вызывается после метода count и до методов create или make. Параметром передаётся массив значений, которые будут последовательно присваиваться указанному полю. Количество элементов в массиве должно соответствовать количеству создаваемых записей, либо можно использовать замыкание для динамического вычисления значения.

Пример

Создадим трёх пользователей с последовательными именами:

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\User; class UserTest extends TestCase { public function test_sequence_of_names() { $users = User::factory() ->count(3) ->sequence( ['name' => 'user_1'], ['name' => 'user_2'], ['name' => 'user_3'] ) ->create(); foreach ($users as $user) { echo $user->name . "\n"; } } } ?>

Результат выполнения кода:

"user_1" "user_2" "user_3"

Пример

Используем последовательность для генерации инкрементальных номеров заказов:

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\Order; class OrderTest extends TestCase { public function test_sequence_of_order_numbers() { $orders = Order::factory() ->count(5) ->sequence(function ($sequence) { return [ 'order_number' => 'ORD-' . ($sequence->index + 1) ]; }) ->create(); foreach ($orders as $order) { echo $order->order_number . "\n"; } } } ?>

Результат выполнения кода:

"ORD-1" "ORD-2" "ORD-3" "ORD-4" "ORD-5"

Пример

Используем несколько последовательностей для разных полей одновременно:

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\Product; class ProductTest extends TestCase { public function test_sequence_of_products() { $products = Product::factory() ->count(4) ->sequence( ['name' => 'prod_a', 'price' => 100], ['name' => 'prod_b', 'price' => 200], ['name' => 'prod_c', 'price' => 300], ['name' => 'prod_d', 'price' => 400] ) ->create(); foreach ($products as $product) { echo $product->name . ' - ' . $product->price . "\n"; } } } ?>

Результат выполнения кода:

"prod_a - 100" "prod_b - 200" "prod_c - 300" "prod_d - 400"

Смотрите также

  • метод count,
    который определяет количество создаваемых записей
  • метод state,
    который задаёт состояние фабрики
  • метод create,
    который создаёт и сохраняет записи в базе данных
  • метод make,
    который создаёт экземпляры моделей без сохранения в базу данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить