Laravel运行迁移报MongoDB\Exception\InvalidArgumentException错误求助
错误原因
这个报错和你Schema里定义的字段类型无关,问题出在unique方法的传参不符合MongoDB Laravel驱动的语法要求:
- 普通MySQL环境下,
unique()的第二个参数可传入整数,代表字符串字段的前缀索引长度 - 但MongoDB驱动中,
unique()的第二个参数接收的是字符串类型的自定义索引名,你传入了整数64,自然触发「预期name选项为string类型却收到int」的报错。
可行解决方案
- 方案1:直接删除第二个参数即可,MongoDB对字符串字段创建唯一索引不需要指定前缀长度,修改后代码如下:
public function up() { Schema::create('personal_access_tokens', function (Blueprint $table) { $table->morphs('tokenable'); $table->index('name'); $table->unique('token'); $table->text('abilities')->nullable(); $table->timestamp('last_used_at')->nullable(); $table->timestamps(); }); }
- 方案2:如果你需要自定义唯一索引的名称,把第二个参数改为字符串类型的索引名即可,示例:
$table->unique('token', 'personal_access_tokens_token_unique');
内容的提问来源于stack exchange,提问作者Tayyab
相关产品推荐
相关产品推荐

