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
相关产品推荐
相关产品推荐

