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

Laravel 5.6 Seeder插入JSON字段时数组转字符串问题求助

解决Laravel 5.6 Seeder中JSON字段插入不重复整数数组的问题

我来帮你搞定这个问题!要给stops这个JSON类型字段存入10个不重复的整数数组,其实Laravel已经帮我们简化了很多操作,下面是修改后的完整Seeder代码,以及关键细节的说明:

完整的RoutesTableSeeder.php代码

<?php

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
use App\Models\Route;

class RoutesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();

        // 方法1:用range+shuffle生成10个不重复整数(推荐,效率更高)
        // 先创建1-100的整数数组,打乱后取前10个,范围可以根据你的需求调整
        $stops = range(1, 100);
        shuffle($stops);
        $stops = array_slice($stops, 0, 10);

        // 方法2:用Faker的unique方法生成(适合需要更随机的场景)
        // $stops = [];
        // for ($i = 0; $i < 10; $i++) {
        //     // 生成1-100之间的唯一整数,注意范围要大于等于需要的数量,否则会报错
        //     $stops[] = $faker->unique()->numberBetween(1, 100);
        // }

        // 插入单条示例数据
        Route::create([
            'name' => $faker->sentence(3), // 用Faker生成随机路由名称
            'stops' => $stops, // 直接传入PHP数组,Laravel自动转成JSON存入数据库
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // 如果需要批量插入多条数据(比如100条),可以用下面的方式
        // $routesData = [];
        // for ($i = 0; $i < 100; $i++) {
        //     $batchStops = range(1, 100);
        //     shuffle($batchStops);
        //     $batchStops = array_slice($batchStops, 0, 10);

        //     $routesData[] = [
        //         'name' => $faker->sentence(3),
        //         'stops' => $batchStops,
        //         'created_at' => now(),
        //         'updated_at' => now(),
        //     ];
        // }
        // Route::insert($routesData);
    }
}

关键注意事项

  • 自动JSON转换:如果你使用Eloquent模型(比如Route::create()),Laravel会自动将PHP数组转换为JSON字符串存入数据库的JSON类型字段,不需要手动调用json_encode()。如果直接用DB::table()插入,则需要手动转换:'stops' => json_encode($stops)。
  • 确保不重复:两种生成不重复整数的方式各有适用场景:
    • 方法1适合范围明确、需要快速生成的情况,不会出现重复问题,效率更高。
    • 方法2适合需要更随机的数值范围,但要注意生成的数量不能超过你设定的数值范围(比如要生成10个不重复数,范围至少要包含10个不同的数),否则Faker会抛出重复值的异常。
  • 字段验证:确保你的Route模型中,stops字段被设置为可填充(在$fillable数组中包含'stops'),否则create()方法会忽略这个字段。

内容的提问来源于stack exchange,提问作者Ber Tsacianegu del Tepuy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:45:49