Laravel 添加唯一约束时出现QueryException
Laravel QueryException when adding unique constraint
我想创建一个“用户”table,并将电子邮件记录作为我的 Laravel 项目
的迁移文件的唯一值
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('company')->nullable();
$table->string('street', 80)->nullable();
$table->string('zip', 10)->nullable();
$table->string('city', 80)->nullable();
$table->string('country', 3)->nullable();
$table->string('firstname', 80)->nullable();
$table->string('lastname', 80)->nullable();
$table->string('email', 80);
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->timestamps();
});
工作正常,但是如果我将 $table->string('email', 80);
替换为 $table->string('email', 80)->unique();
我会收到错误 SQLSTATE[HY000] [2002] Connection refused (SQL: alter table
usersadd unique
users_email_unique(
email))
我读到,在 AppServiceProvider.php 中添加 Schema::defaultStringLength(191);
会解决这个问题,但即使在添加它
并使用 php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear
清除缓存后,错误还在。
在尝试更多之后我意识到,错误是我的 mariadb 版本,正如 MariaDB 10.4 支持文本列上的 UNIQUE KEY,所以我更改了 $table->string('email')->unique()
到 $table->text('email')->unique()
并且成功了。
我想创建一个“用户”table,并将电子邮件记录作为我的 Laravel 项目
的迁移文件的唯一值 Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('company')->nullable();
$table->string('street', 80)->nullable();
$table->string('zip', 10)->nullable();
$table->string('city', 80)->nullable();
$table->string('country', 3)->nullable();
$table->string('firstname', 80)->nullable();
$table->string('lastname', 80)->nullable();
$table->string('email', 80);
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->timestamps();
});
工作正常,但是如果我将 $table->string('email', 80);
替换为 $table->string('email', 80)->unique();
我会收到错误 SQLSTATE[HY000] [2002] Connection refused (SQL: alter table
usersadd unique
users_email_unique(
email))
我读到,在 AppServiceProvider.php 中添加 Schema::defaultStringLength(191);
会解决这个问题,但即使在添加它
并使用 php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear
清除缓存后,错误还在。
在尝试更多之后我意识到,错误是我的 mariadb 版本,正如 $table->string('email')->unique()
到 $table->text('email')->unique()
并且成功了。