You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Seeder和Factory中使用指定预定义数据填充数据表

Laravel 插入预定义GPS地点数据到places表的实现方案

前置说明

假设你的places表对应字段为:custom_id(自定义标识)、district(行政区)、address(地址)、latitude(纬度)、longitude(经度),且对应的App\Models\Place模型已创建,对应字段已加入模型的$fillable属性避免批量赋值报错。


方案一:无需Factory,直接在Seeder中插入预定义数据

适合完全不需要生成伪造测试数据的场景,操作更直接:

  • 执行命令生成Seeder文件:
    php artisan make:seeder PlaceSeeder
  • 编辑database/seeders/PlaceSeeder.php文件,内容如下:
<?php

namespace Database\Seeders;

use App\Models\Place;
use Illuminate\Database\Seeder;

class PlaceSeeder extends Seeder
{
    public function run()
    {
        // 预定义的地点数据
        $places = [
            ['custom_id' => 1851, 'district' => 'Long Ridge', 'address' => '3196 High Ridge Rd', 'latitude' => 41.17530211, 'longitude' => -73.56473089000001],
            ['custom_id' => 1852, 'district' => 'Long Ridge', 'address' => 'Fairway Dr', 'latitude' => 41.17431056, 'longitude' => -73.56484688],
            ['custom_id' => 1850, 'district' => 'Long Ridge', 'address' => '3143 High Ridge Rd', 'latitude' => 41.17365836, 'longitude' => -73.56433814],
            ['custom_id' => 1853, 'district' => 'Long Ridge', 'address' => '69 Fairway Dr', 'latitude' => 41.17321183, 'longitude' => -73.56777862],
            ['custom_id' => 1854, 'district' => 'Long Ridge', 'address' => '137 Fairway Dr', 'latitude' => 41.17195677, 'longitude' => -73.56931346],
            ['custom_id' => 1849, 'district' => 'Long Ridge', 'address' => '3081 High Ridge Rd', 'latitude' => 41.17156046, 'longitude' => -73.56332694],
            ['custom_id' => 1857, 'district' => 'Long Ridge', 'address' => '55 Greens Cir', 'latitude' => 41.17155058, 'longitude' => -73.56715740999999],
            ['custom_id' => 1856, 'district' => 'Long Ridge', 'address' => '10 Greens Cir', 'latitude' => 41.17111036, 'longitude' => -73.56860723],
        ];

        foreach ($places as $place) {
            Place::create($place);
        }
    }
}
  • 执行Seeder插入数据:
    php artisan db:seed --class=PlaceSeeder
    如果需要每次执行全量Seeder时自动运行,可在database/seeders/DatabaseSeeder.php的run方法中添加:
    $this->call(PlaceSeeder::class);

方案二:配合Factory实现

适合后续还需要用Factory生成伪造测试数据的场景:

  • 先创建PlaceFactory,执行命令:
    php artisan make:factory PlaceFactory
  • 编辑database/factories/PlaceFactory.php内容:
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

class PlaceFactory extends Factory
{
    public function definition()
    {
        return [
            // 伪造数据的默认值,后续插入预定义数据时会覆盖
            'custom_id' => $this->faker->randomNumber(),
            'district' => $this->faker->city(),
            'address' => $this->faker->address(),
            'latitude' => $this->faker->latitude(),
            'longitude' => $this->faker->longitude(),
        ];
    }
}
  • 修改上述PlaceSeeder中的循环插入逻辑,替换为Factory写法:
foreach ($places as $place) {
    Place::factory()->create($place);
}

运行Seeder的方式和方案一完全一致。


内容的提问来源于stack exchange,提问作者SiriusPhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:18:00