mysql - Laravel 7 从 SQL 文件中填充突变
问题描述
我正在从头开始重写一个大项目。数据库类似,但表已重命名,字段已移动。
我想在我的 Laravel 7.4 项目中创建读取每个表的 MySQL 转储并将它们导入新数据库的命令。我不能只运行命令,因为一切都发生了变化。
有没有一种简单的方法来读取转储文件,这样每个插入命令都会给我一个包含旧数据库中该记录数据的数组,然后我可以根据需要修改该数组以使用它来填充我的模型?
我想避免必须逐行读取文件并使用正则表达式来减去我需要的内容。
解决方案
我最终编写了一些正则表达式来逐行执行,最后,代码非常易于管理。不过,我需要为每个 SQL 文件编写自定义正则表达式字符串。
public function handle()
{
$sql = file_get_contents('./database/old_sql/language.sql');
preg_match_all('/\(.*\)[\,;]/', $sql, $lines);
foreach (array_shift($lines) as $line) {
preg_match('/^\((\d+)\, \'(.*)\', (\d+)\)[\,;]$/', $line, $values);
$language = Language::updateOrCreate([
'languages.id' => $values[1]
], [
'id' => $values[1],
'name' => $values[2],
'parent_id' => $values[3],
]);
}
}
如果有人有更好、更清洁的解决方案,我很乐意听到。
推荐阅读
- php - 如何从 CodeIgniter 中的多个连接表中删除。
- scala - Spark 和 MapR 数据库连接
- android - 使用 Firebase Cloud 函数获取当前日期和时间
- ibm-cloud - Watson Assistant @sys-date 返回明年的月份
- c++ - 宏能否用于访问动态数组或向量中的元素或为其赋值
- function - Haskell 不带参数的 catch 函数
- python - Subprocess.check_output 失败,退出状态为 -15
- visual-studio - 拉取请求策略 - 构建已过期 - 如何再次运行构建?
- php - PHP Profiler - 使用 C++ 从 PHP 扩展中获取客户端 IP 和 URL
- asp.net - 调用控制器后,MVC 视图不显示 Temp Data 值