一个名为cpe_mac
的现有列。我通过这样的迁移创建了它:
$table->string('cpe_mac')->default(NULL)->nullable();
我想将此->unique()
添加到该列,而不必删除它并重新添加。
$table->string('cpe_mac')->unique();
迁移文件
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterCaptivePortalTable212017 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('captive_portals', function (Blueprint $table) {
$table->string('cpe_mac')->unique();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('captive_portals', function (Blueprint $table) {
$table->string('cpe_mac')->default(NULL)->nullable();
});
}
}
获得
SQLSTATE[42701]: Duplicate column: 7 ERROR: column "cpe_mac" of relation "captive_portals" already exists
是否可以在不丢弃现有列的情况下实现此目的?
(我有很多无法删除的客户数据!)
如何实现这一目标?
我现在正在接受任何建议。
任何提示/建议/帮助都将非常感谢!
答案 0 :(得分:4)
Schema::table('users', function (Blueprint $table) {
$table->string('cpe_mac')->unique()->change();
});
答案 1 :(得分:2)
您需要使用change()
方法:
Schema::table('captive_portals', function (Blueprint $table) {
$table->string('cpe_mac')->unique()->change();
});
或者,您可以在定义列后创建索引。例如:
$table->unique('email');
答案 2 :(得分:0)
如果已定义列,您可以使用:
$table->unique('cpe_mac');
答案 3 :(得分:0)
我遇到了同样的问题,这是Laravel 5.6的解决方案:
第一步:运行以下命令:handle(Http.outboundGateway("http://localhost:8055/greeting2?param1={param1}")
.httpMethod(HttpMethod.GET)
.uriVariable("param1", "payload")
.expectedResponseType(String.class))
第二步:运行以下命令:composer require doctrine/dbal
步骤3:在添加的迁移中,在Schema :: table部分中添加php artisan make:migration THE
-NAME_YOU_WANT --table=TABLENAME
。
第4步:运行以下命令:$table->string('cpe_mac')->unique()->change();