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 的缓存状态。

日常最常用的十条

  1. php artisan list:找命令,永远从这条开始
  2. php artisan make:model X -mfsc:一次生成模型、迁移、工厂、填充器、控制器
  3. php artisan migrate --pretend:执行前先看 SQL
  4. php artisan migrate:status:确认哪条迁移没跑
  5. php artisan db:seed --class=XxxSeeder:按需补数据
  6. php artisan route:list --path=admin:路由对不上时先列出来
  7. php artisan tinker --execute="...":快速验证一段逻辑
  8. php artisan queue:work + queue:restart:队列改动后的固定动作
  9. php artisan schedule:list:确认计划任务到底有没有注册上
  10. php artisan optimize / optimize:clear:性能异常时的第一反应

命令会随版本变化,本文清单来自 Laravel 13.32。升级框架后重新跑一次 php artisan list,比对着旧文章找不存在的命令更靠谱。