You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel执行migrate报syntax error, unexpected ':', expecting ')'

报错原因

两个核心问题会触发这个语法错误,另外代码里还有几个会导致后续运行异常的笔误:

  • 链式调用笔误:报错行$table->$table->unsignedInteger(column:'user_id');多写了一层$table->,闭包里已经传入了Blueprint实例$table,直接调用字段方法即可,重复写$table->属于非法语法。
  • PHP版本不兼容:代码里使用的column:'user_id'、value:false是PHP 8.0才支持的命名参数语法,若当前运行环境PHP版本低于8.0,解析器无法识别参数名后的冒号,就会抛出「unexpected ':'」的语法错误。
  • 其他笔误:
    • title字段重复定义了两次
    • 迁移类不存在logo()字段方法,无法创建对应字段
解决步骤
  1. 先在终端执行php -v确认当前PHP版本:
    • 若版本低于8.0,二选一即可:升级PHP到8.0及以上(需匹配当前Laravel版本的系统要求,Laravel 9及以上版本必须PHP8.0+);或者移除所有命名参数前缀,直接按顺序传参即可。
    • 若版本已经是8.0+,直接修正代码笔误即可。
  2. 逐行修正迁移文件的错误写法:
    • 删除user_id行多余的$table->调用
    • 删除重复定义的title字段
    • 把$table->logo(column:'logo')改为$table->string('logo'),用于存储logo路径字符串
修正后可正常运行的up方法代码
public function up()
{
    Schema::create('listings', function (Blueprint $table) {
        $table->id();
        $table->unsignedInteger('user_id');
        $table->string('title');
        $table->string('slug');
        $table->string('company');
        $table->string('location');
        $table->string('logo')->nullable();
        $table->boolean('is_highlighted')->default(false);
        $table->boolean('is_active')->default(true);
        $table->text('content');
        $table->string('apply_link');
        $table->timestamps();
    });
}

如果你使用PHP8.0+环境,保留命名参数写法也可正常运行,比如写成$table->unsignedInteger(column: 'user_id'),注意冒号后加空格符合PSR规范即可。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 08:33:12