运行php artisan db:seed时CarSeeder无法向MySQL空表插入数据报错
CarSeeder 执行报错修复
你的代码存在3处会直接触发错误的问题:
- 方法调用主体错误:
table()是DB门面提供的方法,不属于Eloquent模型类,你在Cars模型后调用->table('cars')会直接触发方法不存在的报错。如果用模型操作,本身已经绑定了对应数据表,不需要额外调用table()指定表名。 - 调用了不存在的全局函数:Laravel没有全局的
increment()方法,且如果你的id字段是数据库设置的自增主键,插入数据时完全不需要手动传入id值,数据库会自动生成主键id。 - 多次单条插入属于冗余写法,3条数据可以合并为一次批量插入,执行效率更高。
修正后的可运行代码如下:
<?php namespace Database\Seeders; use App\Models\Cars; use Illuminate\Database\Seeder; class CarSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // 模型写法,和你当前引入Cars模型的逻辑匹配 Cars::insert([ ['marka' => 'BMW', 'tip' => 'karavan'], ['marka' => 'Toyota', 'tip' => 'coupe'], ['marka' => 'Mercedes', 'tip' => 'limuzina'], ]); // 如果你更习惯用DB门面操作,也可以用下面的写法,二选一即可 // \DB::table('cars')->insert([ // ['marka' => 'BMW', 'tip' => 'karavan'], // ['marka' => 'Toyota', 'tip' => 'coupe'], // ['marka' => 'Mercedes', 'tip' => 'limuzina'], // ]); } }
补充说明:如果有特殊场景必须手动指定id,不要使用不存在的
increment()方法,可以自行维护计数变量,比如初始化$id = 1,每条数据传入'id' => $id++即可,常规自增主键场景不需要做这个操作。
内容的提问来源于stack exchange,提问作者Mislav Novalić
相关产品推荐
相关产品推荐

