Laravel重新执行迁移前清空SQLite表时遇migrations表已存在错误
解决SQLite清空后执行migrate偶发「migrations表已存在」的问题
方案一:清空后刷新连接+清理数据库
修改你的代码为:
// 开启可写模式清空系统表 DB::statement('PRAGMA writable_schema = 1'); DB::statement('DELETE FROM sqlite_master'); DB::statement('PRAGMA writable_schema = 0'); // 清理数据库碎片并刷新元数据 DB::statement('VACUUM'); // 断开当前连接,强制重新建立(关键:清除连接缓存的旧表结构) DB::disconnect(); // 执行迁移 Artisan::call('migrate');
方案二:直接删除SQLite数据库文件(更简单)
因为SQLite是文件型数据库,删除文件等于彻底清空,代码更简洁:
// 替换成你的SQLite数据库文件路径,默认是database/database.sqlite $dbFile = database_path('database.sqlite'); if (file_exists($dbFile)) { unlink($dbFile); } Artisan::call('migrate');
为什么原代码会偶发报错?
你之前的代码只删除了sqlite_master里的记录,但当前数据库连接还缓存着旧的表结构信息。migrate执行时,Laravel的连接没及时刷新元数据,导致创建migrations表时,系统误以为表已经存在,就抛出了错误。断开重连能彻底清掉缓存的元数据,就不会有这个问题了。
内容的提问来源于stack exchange,提问作者coutier eric
相关产品推荐
相关产品推荐

