使用 php artisan make:command 是创建 Artisan 命令的标准方式,Laravel 自动处理命名空间、继承、签名等;需规范定义参数与选项,安全读参并用 $this->info/warn/error 输出,结合 cursor/chunkById、事务及 --dry-run 提升健壮性。

直接用 php artisan make:command 生成命令类是最标准、最省心的起点。Laravel 会自动完成命名空间设置、继承基类、注册发现、配置签名结构,避免手动出错。
快速创建并确认可用
在项目根目录运行:
-
php artisan make:command User:sync→ 生成UserSyncCommand.php,位于app/Console/Commands/ - 检查生成文件:类名以
Command结尾、命名空间为App\Console\Commands、继承Illuminate\Console\Command - 立即执行
php artisan list,确认user:sync出现在列表中;未出现就检查命名空间、目录位置、缓存(需php artisan config:clear)
定义输入:签名要写准
$signature 是命令解析的核心 DSL,不是普通字符串:
- 必填参数:
{user_id}→$this->argument('user_id')返回字符串,为空时报错 - 可选参数:
{user_id?}或带默认值{user_id?=1} - 布尔选项:
{--force}→$this->option('force')为true或false - 接收值的选项:
{--path=}或带默认值{--path=config.json} - 缩写支持:
{--env=|e=production},允许--env=local或-e local - 数组参数(必须放最后):
{ids*}→ 输入php artisan cmd 101 102得到[101, 102]
安全读参与规范输出
别用 echo、var_dump 或裸 die():
- 读参后务必判空:
$id = $this->argument('user_id'); if (!$id) { $this->error('user_id 不可为空'); return 1; } - 用
$this->info('✅ 同步完成')、$this->warn('⚠️ 跳过无效用户')、$this->error('❌ 查询失败')输出,带颜色和换行 - 交互操作用内置方法:
$this->ask('邮箱?')、$this->confirm('确定删除?')、$this->choice('选环境', ['dev','prod'], 0) - 调试看变量用
$this->line(var_export($data, true)),不中断流程
业务逻辑注意事项
命令运行在 console 环境,但 Eloquent 和容器都可用——问题多出在写法上:
- 模型操作别用
Model::all(),改用cursor()或chunkById(500)防内存溢出 - 多条 DB 操作加事务:
DB::transaction(fn () => { ... }); - 支持预览模式:加选项
{--dry-run},逻辑中判断$this->option('dry-run')并只打印将执行的操作 - 退出码要明确:成功返回
0(默认),失败用$this->error(...); return 1;,不抛未捕获异常或调用exit()


















