我的数据库中有数据。现在我想添加一列
$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());
但它也不起作用。结果是
答案 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();
现在好了!