【问题标题】:How to make combination of two columns as a unique key?如何将两列组合为唯一键?
【发布时间】:2016-09-08 02:11:44
【问题描述】:

我有这张桌子:

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');
    });
}

我想将列 Volume 和 Number 的组合作为唯一键。例如,有一个数据“第 1 卷,第 1 号”,当用户插入相同的组合时,它会抛出数据已经存在的错误消息。有没有办法在 Laravel 中做到这一点?

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    只需在up() 方法中包含以下sn-p

    $table->unique(['volume','number']);
    

    通过设置此约束,如果您插入“第 1 卷,第 1 号”就可以了。但是,如果您再次尝试执行相同操作,则会引发错误。

    条件:

    1. 您正在使用一些好的 DBMS,例如 MySQL 而不是 SQLITE
    2. 您已成功将此更改迁移到数据库中。

    【讨论】:

    • 这样我还能插入不同数量的相同卷数据吗?因为我的数据看起来很像这样:“第 1 卷,第 1 卷”和“第 1 卷,第 2 卷”,“第 2 卷,第 1 卷”,“第 2 卷,第 2 卷”.. 一卷可以有两个不同的数字
    • 如果是这样,那么规则会是什么样子?
    • 你的意思是模型中的规则?
    • 在请求中,如果可能的话也可以建模:)
    • 好的,现在就试试这个。谢谢!
    【解决方案2】:

    您还可以使用uniquewith-validator 包,它允许您验证这样的字段的唯一组合

    'field1' => 'required|unique_with:table_name,field2'
    

    上面的代码会检查field1和field2的组合在给定table_name的表中是否唯一。

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 2014-01-06
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多