【发布时间】:2018-06-18 12:54:21
【问题描述】:
我创建了一个播种器,用于在数据库中插入默认值。
如果我多次运行此播种机,mysql 会返回重复键错误,
所以我的问题是 处理此错误的最佳方法是什么?以及如何继续运行其他种子?
【问题讨论】:
标签: php laravel orm eloquent migration
我创建了一个播种器,用于在数据库中插入默认值。
如果我多次运行此播种机,mysql 会返回重复键错误,
所以我的问题是 处理此错误的最佳方法是什么?以及如何继续运行其他种子?
【问题讨论】:
标签: php laravel orm eloquent migration
您不应该多次运行db:seed 命令。更好的方法是使用以下命令重新创建所有表并为数据播种:
php artisan migrate:refresh --seed
或者在运行php artisan migrate:refresh 命令后只运行一次db:seed。
https://laravel.com/docs/5.5/migrations#rolling-back-migrations
【讨论】:
php artisan migrate 命令来创建一个新表。然后只执行一个新的播种器而不是运行db:seed。
--seed 标志,它也会回滚所有数据库迁移。我的本地机器没问题,但生产机器不行:(
您仍然可以在播种数据之前使用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
}
【讨论】:
将你的种子分成更多的文件,然后在database/DatabaseSeeder.php 中这样称呼它们:
$this->call(AuthorSeeder::class);
$this->call(ContentSeeder::class);
但可以肯定的是,您不能复制密钥,这是您必须解决的问题。
【讨论】:
这个包解决了这个问题,它的版本控制种子就像 laravel 做迁移一样,还有一些其他的好处
php artisan seed 只会运行尚未运行的种子。【讨论】: