besogonskiy
@besogonskiy
работаю php laravel разработчиком.

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

Задача стоит такая - внутри сидера вызвать фабрику для создания кое-каких экземпляров модели, а внутри фабрики иметь возможность обращаться к этим данным.

Например, мы сложными расчетами получаем некую выборку, которую достаточно долго получать. Например, из внешних источников. И мы хотим передавать ее в фабрику чтоб из этой выборки выбирался случайный элемент.

Вот переменная, содаржащая выборку:

$externalCollection

При этом функция definition должна выглядеть так:

public function definition(): array
    {
        return [
            'secret_id' => $this->faker->randomElement($externalCollection)->id,
             ....
        ];
    }


В документации нашел только что возмжно как то states использовать. Но внутри фабрики не получается достать оттуда значения. хотя если задампить $this, то там эти значения есть, которые я передаю.

а передаю вот так:

Order::factory(['texternalCollection => $externalCollection'])
->count(50)->....

только как мне достать ее через фунцию definition или через конструктор хотя бы.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Незачем в фабрику передавать
Прямо в сидере

use Illuminate\Database\Eloquent\Factories\Sequence;

public function run()
  {
    $list = ['secret1','secret2','secret3']; //получаем список данных;
    shuffle($list); // Перемешиваем

    Order::factory(20)
      ->state(new Sequence(function () use (&$list) {
        return ['secret_id' => array_pop($list)];
      }))
      ->create();
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы