运行php artisan db:seed多个并继续重复键插入

时间:2018-01-09 13:14:52

标签: php laravel orm eloquent migration

我在数据库中创建了一个插入默认值的播种器。

如果我多次运行此播种器,则mysql会为重复键返回错误

所以我的问题是处理此错误的最佳方法是什么?如何继续运行其他种子?

4 个答案:

答案 0 :(得分:4)

您不应多次运行Public Sub MyMacro If ActiveSheet.Name < "Safe" Then Exit Sub 'rest of your macro here End Sub 命令。更好的方法是使用以下命令重新创建所有表并播种数据:

db:seed

或者在运行php artisan migrate:refresh --seed 命令后运行db:seed

https://laravel.com/docs/5.5/migrations#rolling-back-migrations

答案 1 :(得分:2)

在播种数据之前,您仍然可以使用truncate方法,这将删除重复的键错误,因为该表已经为空:

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class EntitiesTableSeeder extends Seeder {

    public function run() {

        DB::table('table')->truncate();
        //OR
        \App\Model::truncate();

        // then insert your data here

}

答案 2 :(得分:0)

将种子分成多个文件,database/DatabaseSeeder.php只需将它们称为:

$this->call(AuthorSeeder::class);
$this->call(ContentSeeder::class);

但是可以肯定的是,你无法复制密钥,这就是你必须解决的问题。

答案 3 :(得分:0)

eighty8/laravel-seeder

此软件包解决了这个问题,它的版本像laravel一样控制着种子的迁移,

  • 允许您在具有不同值的不同环境中播种数据库。
  • 允许您使用Laravel当前处理的方式来“版本化”种子
  • 移民。运行php artisan seed将只运行尚未运行的种子。
  • 允许您运行同一模型/表的多个种子
  • 如果您的数据库正在生产中,则会提示您