我试图创建一个命令,在不同的文件夹中运行migrate:fresh命令,以便在当前文件夹中运行migrate:fresh的同时重置模拟应用程序。它是这样设置的:
$command = sprintf('(cd %s && php artisan migrate:fresh)', $path);
system($command);
字符串
这里的路径是绝对路径。运行此命令将给出输出:
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (16.60ms)
型
然而,当在应用程序的数据库中进行验证时,所有数据仍然存在,并且没有任何新设置。因此,看起来数据没有被正确迁移,尽管Laravel声称它是。
起初我以为是因为电话使用系统。所以我使用了exec,shell_exec和Symfony进程。此外,因为我认为这可能是一个权限问题,所以我尝试使用sudo运行该命令。这并没有帮助。Laravel版本8.8
$command = sprintf('(cd %s && php artisan migrate:fresh)', $path);
exec($command);
shell_exec($command);
$process = Process::fromShellCommandline($command);
$process->run();
型
每一个似乎都在“工作”,输出与上面类似。然而,当验证数据是否消失时,它仍然存在。我的期望是,在创建了一个子shell并看到输出之后,该过程实际上已经正确运行了。但事实似乎并非如此。
1条答案
按热度按时间bvjveswy1#
Matiaslauriti有这个权利。它实际上运行在错误的环境中,因此它实际上覆盖了主数据库。之所以“看起来”没问题,是因为在mock数据库迁移之后,在该数据库上运行了migrate:fresh。
最后,最终解决我的问题的是以一种困难的方式设置环境,创建一个这样的结构(请注意,我使用Dotenv为我的环境变量创建Map并加载文件):
字符串
我尝试迁移,如果由于 * 任何原因 * 失败,环境仍将被放回。该命令本身会将应用程序上下移动,因此我并不担心这方面的检查。