Laravel 如何基于数组创建播种器

Laravel how to create a seeder based on array

如何基于数组创建 laravel-seeder?

我有一个这样的数组:

$positions = array(
    array('industry_id' => '1', 'name' => 'developer'), 
    array('industry_id' => '1', 'name' => 'designer'),
    array('industry_id' => '2', 'name' => 'project manager'),
    array('industry_id' => '3', 'name' => 'manager'),
   ...etc, etc,...etc // there are like 150 entries
 ) 

所以不要这样做

Position::create([
   'industry_id' => '1',
   'name' => 'developer'
]);

对于每个条目,我都希望有另一种方法可以实现吗?

你可以尝试 insert() 通过这个 created_at 并且 updated_at 不会自动创建所以手动添加

ref link https://laravel.com/docs/8.x/queries#inserts

Position::insert([
    [
        'industry_id' => '1',
        'name' => 'developer',
        "created_at" => now(),
        "updated_at" => now()
    ],
    [
        'industry_id' => '1',
        'name' => 'designer',
        "created_at" => now(),
        "updated_at" => now()
    ],
    [
        'industry_id' => '2',
        'name' => 'project manager',
        "created_at" => now(),
        "updated_at" => now()
    ],
    [
        'industry_id' => '3',
        'name' => 'manager',
        "created_at" => now(),
        "updated_at" => now()
    ],
]);

您可以使用 foreach :

foreach ($positions as $position) {
    Position::create(
        [
            'industry_id' => $position["industry_id"],
            'name'        => $position["name"],
        ]
    );
}

它不适用于大 array/data 但它会自动创建 created_atupdated_at ,其他方式使用 insert 就像保罗的回答

选项 A)

$positions = array(
    array('industry_id' => '1', 'name' => 'developer'), 
    array('industry_id' => '1', 'name' => 'designer'),
    array('industry_id' => '2', 'name' => 'project manager'),
    array('industry_id' => '3', 'name' => 'manager'),
    ....
 );

 foreach ($positions as $position) {
     Position::create([
      'industry_id' => $position['industry_id'],
      'name' => $position['name'],
    ]);
 }

选项 B)

DB::table((new Position)->getTable())->insert($positions);

Note: Insert doesn't automatically populate the timestamp columns.