Задать вопрос
@maaestr0

Как записать данные из массива через фабрику?

Здравствуйте, в БД есть табличка категории, и нужно как-то наполнить ее тестовыми, уникальными данными. Я решил попробовать через фабрику. Данные нужно взять из массива, но как пройти по всему массиву, и записать в базу?
Factory
public function definition()
    {   
        $category = ['art','bussines','koop','mark','psy','it','photo'];

        return [
            'title' => $category[array_rand($category,1)],
        ];
    }


Seeder
CourseCategory::factory()->count(7)->create();

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

class CityFactory extends Factory
{
  protected $model = City::class;
  public function definition()
  {
    $tz = array_keys(Timezone::getData());
    return [
      'name'     => $this->faker->city,
      'timezone' => $this->faker->randomElement($tz),
      'enabled'  => true,
    ];
  }
}

use Illuminate\Database\Eloquent\Factories\Sequence;
class CitySeeder extends Seeder
{
  public function run()
  {
    $predefinedCities = array_reverse($this->getPredefinedCities());
    City::factory(CITY_COUNT)
      ->state(new Sequence(function () use (&$predefinedCities) {
        return array_pop($predefinedCities) ?? [];
      }))
      ->create();
  }

  private function getPredefinedCities()
  {
    return [
      [
        'name'         => 'Moscow',
        'timezone'     => '+0300',
        'enabled'      => true,
      ],
      [
        'name'         => 'Saint-Petersburg',
        'timezone'     => '+0300',
        'enabled'      => true,
      ],
      [
        'name'         => 'Sochi',
        'timezone'     => '+0300',
        'enabled'      => true,
      ],
    ];
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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