从Laravel

时间:2018-01-09 06:40:58

标签: mysql laravel migration

我的数据库中有数据。现在我想添加一列

$table->string('md5_url');

有效。但现在我想在md5_url上添加唯一索引。但它不起作用,因为我的数据库中的行具有相同的值(=默认值)。 那么,如果我想创建新的列形式现有列,我该怎么办(例如我想要md5_url = md5(url_column_value)

我知道2种设置默认值的方法。

$table->string('md5_url')->default($value);

$stack_links = DB::table('stack_links')->update(['md5_url' => $value]);

但是上面2,$ value是修复,如何使其灵活(每行不同),以便我可以在此之后添加唯一索引。

注意:我不想创建模型StackLink,所以不要这样尝试:

$stack_links = StackLink::get();
foreach($stack_links as $stack_link) {
   $stack_link->md5_url = md5($stack_link->url);
   $stack_link->save();
}

更新:尝试

$table->string('md5_url')->default(uniqid());

但它也不起作用。结果是

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试IGNORE设置唯一索引以添加新列。

public function up()
{
    Schema::table('listings', function (Blueprint $table) {
        $table->string('md5_url');
    });
    DB::statement('ALTER IGNORE TABLE listings ADD UNIQUE INDEX myindex (md5_url)');
}

public function down()
{
    Schema::table('listings', function (Blueprint $table) {
        $table->dropColumn('md5_url');
    });
}

答案 1 :(得分:1)

更改列属性,如下所示:

$table->string('md5_url')->nullable();

现在好了!