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

Laravel 5.8 Seeder中DB::insert仅插入数组首条数据问题

解决Laravel 5.8批量插入权限数据仅插入第一条的问题

嘿,我一眼就找到问题的根源啦!你遇到的情况是因为批量插入的数组格式不对导致的。

问题原因

Laravel的DB::table()->insert()方法,当需要批量插入多条记录时,要求你把所有待插入的记录数组包裹在一个外层数组中。而你现在是把两个记录数组作为独立的参数传递给insert()方法,框架只会处理第一个参数对应的那条数据,第二个参数直接被忽略了,所以就只插入了id为1的权限。

修复后的代码

把两条记录的数组放进同一个外层数组里,同时还可以简化时间字段的写法(Laravel支持直接传入Carbon实例):

<?php
use Illuminate\Support\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class PermissionsTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('permissions')->insert([
            [
                'id' => 1,
                'name' => 'list_users',
                'display_name' => 'List users',
                'description' => 'Can list all users',
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now()
            ],
            [
                'id' => 2,
                'name' => 'show_user',
                'display_name' => 'Show single user',
                'description' => 'Can show single user details',
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now()
            ]
        ]);
    }
}

额外提示

  • 无需手动把Carbon实例格式化为字符串,Laravel会自动将其转换为数据库兼容的时间格式,代码更简洁易维护。
  • 运行种子文件时,使用命令php artisan db:seed --class=PermissionsTableSeeder,之后去PostgreSQL的permissions表中就能看到两条记录都成功插入了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:25:43