【问题标题】:with migration to fill slug with default value迁移以使用默认值填充 slug
【发布时间】:2019-02-09 12:04:44
【问题描述】:

在我的 Laravel 5.6/PostgreSQL 10.5 应用程序中 我有 2 张桌子:

CREATE TABLE public.rt_genres (
    id serial NOT NULL,
    published bool NULL DEFAULT false,
    created_at timestamp NOT NULL DEFAULT now(),
    updated_at timestamp NULL,
    CONSTRAINT rt_genres_pkey PRIMARY KEY (id)
)...

CREATE TABLE public.rt_genre_translations (
    id serial NOT NULL,
    genre_id int4 NOT NULL,
    "name" varchar(100) NOT NULL,
    description text NOT NULL,
    created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    locale varchar(2) NOT NULL,
    CONSTRAINT genre_translations_genre_id_locale_unique UNIQUE (genre_id, locale),
    CONSTRAINT rt_genre_translations_pkey PRIMARY KEY (id),
    CONSTRAINT genre_translations_genre_id_foreign FOREIGN KEY (genre_id) REFERENCES rt_genres(id) ON DELETE CASCADE
)

我需要在第一个 rt_genres 表中添加 slug 字段 带迁移规则:

    $table->string('slug', 105)->unique();

得到错误:

: Unique violation: 7 ERROR:  could not create unique index "genres_slug_unique"                                          
DETAIL:  Key (slug)=(id) is duplicated.")

1)如果有办法在迁移中分配一些唯一的默认值,例如 = id ->默认('rt_genres.id') ?

2) 当我使用时,从 public.rt_genre_translations.name 分配给 slug 值会很酷 “cviebrock/eloquent-sluggable”:我的应用程序中的“^4.5”插件?我可以吗?

谢谢!

【问题讨论】:

  • 表中是否已有数据?
  • 是的,这些行调用错误...

标签: postgresql laravel-5 slugify


【解决方案1】:

您只能使用触发器 (SO answer) 从不同的列中获取默认值。

可以发专栏nullable

$table->string('slug', 105)->nullable()->unique();

或者您创建列,插入唯一值,然后创建索引:

Schema::table('rt_genres', function($table) {
    $table->string('slug', 105);
});
DB::table('rt_genres')->update(['slug' => DB::raw('"id"')]);
Schema::table('rt_genres', function($table) {
    $table->unique('slug');
});

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2020-06-02
    • 2020-05-26
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多