如何将两列组合作为唯一键?

Pre*_*vey 1 laravel laravel-5

我有这张桌子:

public function up()
{
    Schema::create('edition', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('volume');
        $table->text('cover')->nullable();
        $table->enum('number', ['1', '2']);
        $table->timestamps();
    });
    Schema::table('journal', function(Blueprint $table) {
        $table->foreign('id_edition')->references('id')->on('edition')->onDelete('cascade')->onUpdate('cascade');
    });
}
Run Code Online (Sandbox Code Playgroud)

我想将列Volume和Number的组合作为唯一键.例如,存在数据"Volume 1,Number 1",当用户插入相同的组合时,它将抛出数据已存在的错误消息.我有办法在Laravel做到这一点吗?

Huz*_*afi 5

只需在up()方法中包含以下代码段即可

$table->unique(['volume','number']);
Run Code Online (Sandbox Code Playgroud)

通过设置此约束,如果您插入"第1卷,第1号",一旦它可以正常.但是,如果您尝试再次执行相同操作,则会抛出错误.

条件:

  1. 您使用的是一些优秀的DBMS,例如MySQL和不是SQLITE
  2. 您已成功将此更改迁移到数据库中.