Artisan 是 Laravel 自带的命令行入口,执行 php artisan list 能看到当前项目里所有可用命令。这份清单不是固定的:安装的扩展包会追加命令,项目自己写的命令也会出现在里面。本文以 Laravel 13.32 为例,把本项目的 124 条命令按用途分组,顺手记下常用参数和踩过的坑。
先学会查,再谈背
命令数量每升级一次大版本都会变,与其背清单,不如记住下面四条:
php artisan list # 按命名空间分组列出全部命令
php artisan list --raw # 一行一条,方便配合 grep / findstr 过滤
php artisan help make:model # 查看某个命令的参数与选项(等价于 --help)
php artisan about # 一次性看到环境、缓存、驱动、数据库连接
排查线上问题时,php artisan about 往往比翻 .env 更快:它会明确告诉你配置、路由、视图、事件是否已缓存,以及当前生效的缓存驱动和队列驱动。
全局选项
| 选项 | 作用 |
|---|---|
-v / -vv / -vvv | 提高输出详细程度,-vvv 会打印异常堆栈 |
-q | 静默模式,只输出错误 |
-n / --no-interaction | 不询问,全部使用默认值,适合脚本与 CI |
--ansi / --no-ansi | 强制开启或关闭彩色输出,写日志时很有用 |
--env=testing | 临时切换环境,读取对应的 .env.testing |
--version | 输出框架版本号 |
项目、配置与运行
| 命令 | 说明 |
|---|---|
about | 环境概览:PHP 版本、缓存状态、数据库、驱动 |
env | 只打印当前环境名称,适合写进部署脚本做判断 |
key:generate | 生成 APP_KEY,新项目初始化必做;--show 只显示不写入 |
config:show | 查看某个配置文件的最终值,如 config:show database |
config:cache / config:clear | 生成 / 删除配置缓存,生产环境启动时的第一步 |
config:publish | 把框架默认配置发布到 config/ 目录 |
optimize / optimize:clear | 一次性缓存配置、路由、事件、视图;反向清理 |
clear-compiled | 删除编译后的服务文件,类重命名后找不到时用 |
serve | 启动开发服务器,--host=0.0.0.0 --port=8001 可指定监听地址 |
dev / dev:list | 并行启动开发所需的多个进程;列出已注册的进程 |
reload | 平滑重载正在运行的服务(配合 dev 使用) |
down / up | 进入 / 退出维护模式 |
docs | 在终端里打开对应版本文档 |
inspire | 输出一句鸡汤,纯娱乐 |
completion | 生成 shell 补全脚本,命令多的时候很省事 |
维护模式有几个实用参数:
php artisan down --secret="molly2026" --retry=60 --render="errors::503"
php artisan up
--secret 会生成一个带令牌的访问地址,自己可以用它绕过维护页;--retry 告诉浏览器 60 秒后再试,避免用户反复刷新。
代码生成:make 家族
| 分组 | 命令 |
|---|---|
| HTTP 层 | make:controller、make:request、make:middleware、make:resource |
| 模型层 | make:model、make:migration、make:seeder、make:factory、make:observer、make:scope、make:cast、make:policy、make:rule |
| 异步与事件 | make:job、make:job-middleware、make:event、make:listener、make:mail、make:notification、make:channel、make:command |
| 结构类 | make:class、make:interface、make:trait、make:enum、make:exception、make:provider、make:config |
| 视图与测试 | make:view、make:component、make:test |
| 建表迁移 | make:cache-table、make:queue-table、make:queue-batches-table、make:queue-failed-table、make:notifications-table、make:session-table |
make:model 的短选项最值得记,一次能带出四五个文件:
php artisan make:model Article -mfsc
# -m 迁移 -f 工厂 -s 填充器 -c 控制器
# 需要资源控制器再加 -r,需要软删除加 -R
几个容易忽略的细节:make:controller --resource 生成七个方法骨架;--api 只保留增删改查接口需要的五个;make:test --pest 生成 Pest 风格测试;同名文件已存在时默认会提示,脚本里加 --force 才覆盖,慎用。
数据库与迁移
| 命令 | 说明 |
|---|---|
migrate | 执行未运行过的迁移,--seed 顺带填充数据 |
migrate:status | 列出每个迁移是否已执行,排错第一步 |
migrate:install | 创建迁移记录表,通常不需要手动执行 |
migrate:rollback | 回滚最近一批,--step=1 只回滚一条 |
migrate:reset | 回滚全部迁移(表结构消失,数据仍在表里的一并受影响) |
migrate:refresh | 回滚全部再重新执行,--seed 顺带填充 |
migrate:fresh | 直接删掉所有表再执行迁移,比 refresh 更快,也更危险 |
db:seed | 执行填充器,--class=TechPostSeeder 指定单个 |
db:wipe | 删除所有表、视图与类型,--drop-views 一并处理视图 |
db | 直接进入数据库命令行,省去手敲连接参数 |
db:show / db:table | 查看数据库与单表的大小、索引、行数 |
db:monitor | 监控连接数,超过阈值时触发事件 |
schema:dump | 把当前结构导出为 SQL,之后的迁移会先加载它 |
model:show | 查看模型对应的表、字段、关系、访问器 |
model:prune | 按 prunable() 规则清理过期数据 |
php artisan migrate --pretend # 只打印将要执行的 SQL
php artisan migrate --force # 生产环境必须显式加,防止误操作
php artisan migrate:rollback --step=1
php artisan db:seed --class=TechPostSeeder --force
--pretend 是上线前最该养成的习惯:把 SQL 看一遍再执行,比回滚数据库便宜得多。另外 schema:dump 之后,migrate 会先导入导出的结构与数据快照,只执行快照之后的迁移,冷启动测试会快很多。
路由、视图、事件与缓存
| 命令 | 说明 |
|---|---|
route:list | 列出全部路由,--path=admin、--method=POST、-v 缩小范围 |
route:cache / route:clear | 生成 / 删除路由缓存 |
view:cache / view:clear | 预编译全部 Blade 模板 / 清理编译产物 |
event:list | 列出事件与监听器的对应关系,排查「监听没触发」很有效 |
event:cache / event:clear | 缓存事件自动发现结果 / 清理 |
cache:clear | 清空应用缓存(按缓存前缀,不会清掉别人的键) |
cache:forget | 删除指定键,如 cache:forget home.stats |
cache:prune-stale-tags | 仅 Redis:清理失效的标签索引 |
这里有两个经典问题。第一,config:cache 之后 env() 在 config 目录之外会返回 null,所有环境变量都应该经过配置文件再取。第二,route:cache 不接受闭包路由,执行时直接报错,路由统一写成控制器方法就没有这个约束。
队列
| 命令 | 说明 |
|---|---|
queue:work | 常驻进程消费任务,生产环境的主力 |
queue:listen | 每次任务重新加载代码,开发时方便,性能低于 work |
queue:restart | 通知 worker 处理完当前任务后退出重启,改代码后必须执行 |
queue:failed / queue:retry | 查看失败任务 / 重试,queue:retry all 全部重试 |
queue:forget / queue:flush | 删除单条失败任务 / 清空失败任务表 |
queue:clear | 清空指定队列里尚未处理的任务 |
queue:monitor | 监控队列堆积数量,超出阈值报警 |
queue:pause / queue:resume | 暂停 / 恢复某条队列的消费 |
queue:prune-batches / queue:prune-failed | 清理过期的批处理记录与失败记录 |
queue:retry-batch | 重试整批任务里失败的作业 |
php artisan queue:work redis --queue=high,default --tries=3 --timeout=60 --sleep=3
php artisan queue:work --stop-when-empty --max-jobs=500
php artisan queue:restart
参数里最容易出错的是 --timeout:它必须小于队列配置的 retry_after,否则任务执行超时后会被重新投递,同一个任务跑两遍。生产环境用 Supervisor 或 systemd 托管 worker,不要挂在 nohup 里。
任务调度
| 命令 | 说明 |
|---|---|
schedule:list | 列出所有计划任务与下次执行时间 |
schedule:test | 立即执行某一条任务,验证业务逻辑 |
schedule:run | 执行当前到期的任务,由 cron 每分钟调用一次 |
schedule:work | 本地常驻调度进程,不用配 cron |
schedule:interrupt | 中断正在执行的调度 |
schedule:clear-cache | 清理互斥锁缓存,任务卡住不跑时用 |
schedule:pause / schedule:resume | 暂停 / 恢复整个调度器 |
线上只配一条 cron:
* * * * * cd /var/www/xml_blog && php artisan schedule:run >> /dev/null 2>&1
本地开发不要配 cron,直接 php artisan schedule:work 常驻即可。任务「该跑却没跑」时,先 schedule:list 确认时间表达式,再 schedule:clear-cache 清掉可能残留的互斥锁。
存储、发布与语言文件
| 命令 | 说明 |
|---|---|
storage:link | 创建 public/storage 软链接,上传文件对外访问的前提 |
storage:unlink | 删除上一步创建的软链接 |
vendor:publish | 发布扩展包的配置、迁移、视图;用 --tag= 或 --provider= 精确指定 |
package:discover | 重建包清单,安装新扩展后自动执行,一般不用手动跑 |
lang:publish | 把语言文件复制到 lang/ 目录,方便改成中文 |
stub:publish | 发布会话里被 make 使用的模板,自定义生成的代码骨架 |
install:api | 生成 API 路由文件并安装 Sanctum |
install:broadcasting | 创建广播频道路由文件 |
auth:clear-resets | 清理过期的密码重置令牌 |
channel:list | 列出已注册的私有广播频道 |
调试、测试与运维
| 命令 | 说明 |
|---|---|
tinker | 交互式控制台,tinker --execute="..." 可以单行执行 |
test | 运行测试,--filter= 过滤、--parallel 并行、--coverage 覆盖率 |
pail | 实时跟踪日志,pail --filter=error 只看错误 |
env:encrypt / env:decrypt | 加密 / 解密环境文件,密钥不入库时使用 |
项目自己的命令
本站在框架命令之外还有两条自定义命令:blog:seed 写入内置文章,hot:fetch 采集各平台热榜。写一条自己的命令只要三步:
php artisan make:command HotFetch
# 生成的类里填上签名与说明
protected $signature = 'hot:fetch {platform?} {--limit=20}';
protected $description = '采集各平台热榜并写入数据库';
public function handle(): int
{
$this->info('开始采集');
return self::SUCCESS;
}
签名中的花括号是参数:{platform?} 为可选参数,{--limit=20} 为带默认值的选项。命令类放在 app/Console/Commands 会被自动注册,不需要改 Kernel。
生产环境别乱敲的命令
| 命令 | 风险 |
|---|---|
migrate:fresh / db:wipe | 直接删表,没有备份就没有回头路 |
migrate:reset | 回滚全部迁移,等同结构清空 |
cache:clear | 大站清空缓存会让数据库瞬间承压,建议低峰执行 |
queue:flush | 失败任务一并消失,排错线索全丢 |
tinker | 在生产直接改数据无法审计,尽量写成命令或脚本 |
config:cache 前的 env() | 缓存后 env() 失效,上线前先全量搜一遍 |
一个稳妥的上线顺序:拉代码 → composer install --no-dev → php artisan migrate --force → php artisan optimize → php artisan queue:restart → 检查 php artisan about 的缓存状态。
日常最常用的十条
php artisan list:找命令,永远从这条开始php artisan make:model X -mfsc:一次生成模型、迁移、工厂、填充器、控制器php artisan migrate --pretend:执行前先看 SQLphp artisan migrate:status:确认哪条迁移没跑php artisan db:seed --class=XxxSeeder:按需补数据php artisan route:list --path=admin:路由对不上时先列出来php artisan tinker --execute="...":快速验证一段逻辑php artisan queue:work+queue:restart:队列改动后的固定动作php artisan schedule:list:确认计划任务到底有没有注册上php artisan optimize/optimize:clear:性能异常时的第一反应
命令会随版本变化,本文清单来自 Laravel 13.32。升级框架后重新跑一次
php artisan list,比对着旧文章找不存在的命令更靠谱。