【问题标题】:How to write alter migration to add composite key in laravel如何编写更改迁移以在 laravel 中添加复合键
【发布时间】:2020-12-28 14:06:10
【问题描述】:

我是 laravel 的新手。我希望同一个用户不能再次获得相同的角色。当我将角色 1 分配给用户 1 时,从邮递员开始,然后下次我再次将角色 1 分配给用户 1 时,它不应该发生。我有 role_user 表,其中有 3 列。 idrole_iduser_id。我想要一个用于role_iduser_id 的复合键。但是我不知道怎么写。

 public function up()
 {
    Schema::table('role_users', function (Blueprint $table) {
       //     
    });
 }

【问题讨论】:

  • 你可以使用spatie的laravel-permission来创建角色,github.com/spatie/laravel-permission
  • @sta 我只想为两列创建复合键。我该怎么做?
  • 你的意思是复合唯一约束?
  • @OMR 是的,我希望同一个用户不能再次获得相同的角色。当我将角色 1 分配给用户 1 时,来自邮递员,然后下次我再次将角色 1 分配给用户 1 时,它不应该发生。

标签: laravel laravel-5 laravel-4 migration


【解决方案1】:

这次迁移是为了更新原来的,对多个列设置唯一约束:

 public function up()
 {
    Schema::table('role_users', function (Blueprint $table) {
          $table->unique(array('role_id', 'user_id'));
    });
 }

【讨论】:

  • 这是用于更改迁移还是主迁移文件?
  • 这个用于改变迁移,如果你可以重新迁移你的迁移,你可以添加: $table->unique(array('role_id', 'user_id'));到你原来的
  • for user 不应该再次分配相同的角色,是同时创建 role_id, user_id 复合键还是 id,role_id ?你能推荐我吗
  • 因为用户不应该再次分配相同的角色,你应该使两个列唯一,所以如果 1,1 在插入或更新操作中再次出现,db 将抛出一个违反索引错误
  • “你应该让两列都独一无二”哪一列?
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2020-03-13
  • 2020-01-23
  • 2014-03-31
  • 2016-12-16
相关资源
最近更新 更多