kyo*_*kyo 2 php database-migration laravel laravel-5
现有的列cpe_mac。我是通过这样的迁移创建它的:
$table->string('cpe_mac')->default(NULL)->nullable();
Run Code Online (Sandbox Code Playgroud)
我想将此添加->unique()到该列,而不必删除它并重新添加。
$table->string('cpe_mac')->unique();
Run Code Online (Sandbox Code Playgroud)
迁移档案
<?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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
得到
SQLSTATE[42701]: Duplicate column: 7 ERROR: column "cpe_mac" of relation "captive_portals" already exists
Run Code Online (Sandbox Code Playgroud)
是否可以在不删除现有专栏的情况下实现这一目标?
(我有很多无法删除的客户端数据!)
人们将如何实施呢?
目前,我愿意接受任何建议。
任何提示/建议/帮助对此将不胜感激!
您需要使用change()方法:
Schema::table('captive_portals', function (Blueprint $table) {
$table->string('cpe_mac')->unique()->change();
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以在定义列之后创建索引。例如:
$table->unique('email');
Run Code Online (Sandbox Code Playgroud)
https://laravel.com/docs/5.4/migrations#indexes
小智 5
Schema::table('users', function (Blueprint $table) {
$table->string('cpe_mac')->unique()->change();
});
https://laravel.com/docs/5.0/schema#changing-columns