我有以下脚本(遵循here的建议):
public function up()
{
set_time_limit(1000);
$sqlFileDirectory =
__DIR__.DIRECTORY_SEPARATOR.
'..'.DIRECTORY_SEPARATOR.
'..'.DIRECTORY_SEPARATOR.
'..'.DIRECTORY_SEPARATOR.
'db'.DIRECTORY_SEPARATOR.
'imports'.DIRECTORY_SEPARATOR
;
$dir = new \DirectoryIterator($sqlFileDirectory);
foreach ($dir as $fileinfo)
{
if (!$fileinfo->isDot())
{
$sqlFile = $sqlFileDirectory.$fileinfo->getFilename();
DB::unprepared(file_get_contents($sqlFile));
}
}
}
它所做的只是在/ db / imports文件夹中导入sql文件。它获取文件内容,然后执行以下操作:
DB::unprepared(file_get_contents($sqlFile));
完成后,终端甚至会说:
$ php artisan migrate
Migrating: 2020_08_13_111729_import_various_sql_files_from_existing_site
Migrated: 2020_08_13_111729_import_various_sql_files_from_existing_site (0.02 seconds)
但是当我查看迁移表时,什么都没有!
如果我跑步:
php artisan migrate
然后再次说:
$ php artisan migrate
Migrating: 2020_08_13_111729_import_various_sql_files_from_existing_site
Migrated: 2020_08_13_111729_import_various_sql_files_from_existing_site (0.02 seconds)
我删除此代码的那一刻
DB::unprepared(file_get_contents($sqlFile));
然后创建迁移表中的条目。
有想法吗?
我什至尝试将其尝试捕获。还是没有运气。
我的怀疑也许是sql文件之一抛出错误,导致迁移脚本无法创建条目。
有想法吗?
答案 0 :(得分:1)
找到了。 MySqlDump将此添加到我的导出的顶部:
SET AUTOCOMMIT = 0;
所以我在up()的底部添加了它:
DB::unprepared(' SET AUTOCOMMIT = 1; ');