php artisan migrate --path 可运行单个迁移文件,路径需相对 database/migrations/,如 --path=2024_05_10_123456_create_posts_table.php;--realpath 用于绝对路径加载非标准目录迁移;migrate:fresh 不支持 --path 参数。

php artisan migrate --path 只运行单个迁移文件
想只跑某一个刚写的迁移,而不是全部待执行的,php artisan migrate --path 是最直接的方式。但它的路径处理很“老实”,容易拼错。
-
--path的值是相对于database/migrations/的,不是项目根目录 —— 写成database/migrations/2024_05_10_123456_create_posts_table.php会变成双重路径,命令静默失败 - 正确写法是:
php artisan migrate --path=2024_05_10_123456_create_posts_table.php - 如果迁移里调用了
Schema::table('users'),而users表还没建(对应迁移没执行),就会报错 ——--path不检查依赖顺序,只管跑你指定的文件 - 该命令不会自动记录到
migrations表?不,它会正常插入记录,和全量 migrate 一样
php artisan migrate --realpath 加载非标准目录下的迁移
当迁移文件不在 database/migrations/ 下(比如放在 custom_migrations/ 或测试专用目录),就得用 --realpath。
-
--realpath必须传绝对路径,Laravel 不校验路径是否存在,写错就无提示、不报错、不执行 - 示例:
php artisan migrate --realpath=/var/www/myapp/custom_migrations/2024_05_10.php - 注意:这类迁移仍会被写入
migrations表,且 batch 值和常规迁移混在一起 —— 回滚时可能误伤其他迁移 - 如果多个迁移共用同一张表结构变更逻辑,建议统一管理路径,避免后期
migrate:rollback --step=1撤错文件
php artisan migrate:fresh --path 实际不可用
migrate:fresh 没有 --path 参数,文档和源码里都不存在。试图加上会报错:Unknown option: --path。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
migrate:fresh的行为是 DROP 所有业务表(跳过migrations和failed_jobs),再重新跑 全部 迁移文件 - 想“只 fresh 某几个表”?不行。它不支持筛选,也不接受路径参数
- 替代方案:先
php artisan migrate:reset --step=N回滚最近 N 个,再用--path单独跑需要的迁移 - 或者手动删掉
migrations表里不需要重跑的记录(仅限本地开发环境)
为什么 php artisan migrate 提示 “Nothing to migrate”
不是命令失效,是 Laravel 看了 migrations 表后发现:你要跑的迁移,它已经记过了。
- 检查点一:
SELECT * FROM migrations WHERE migration = '2024_05_10_123456_create_posts_table';—— 如果有结果,说明这条迁移已被标记为完成 - 检查点二:
.env中的DB_DATABASE是否连到了预期库?连错库会导致你在测试库跑了迁移,生产库还是空的 - 检查点三:文件是否真在
database/migrations/下?IDE 重命名或 Git 忽略可能导致文件没同步过去 - 常见误操作:删了表但没删
migrations表里的记录 → 此时用php artisan migrate:reset或手动 DELETE 更安全
实际执行时最容易被忽略的是 DB_CONNECTION 和 DB_DATABASE 的环境隔离问题——同一个命令,在 .env.local 和 .env.production 下可能操作完全不同的数据库,而控制台不会提醒你当前连的是哪个库。










