微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Laravel 迁移向现有键添加约束

如何解决如何使用 Laravel 迁移向现有键添加约束

我的项目中目前有一个已投入生产的数据库。但是我在之前的迁移中没有使用约束。现在我有productsshops 和中间表 product_shop。问题是,如果我删除任何已经放在某个商店的产品,枢轴仍然保留在中间表中。我需要强制我的数据库的参照完整性,即使尚未更改/删除任何产品/商店。

我不想使用 Laravel 的事件侦听器,因为当我删除一个对象而不先检索它时,它们不起作用。让我们考虑一下现有的结构,其中有我不想丢失的数据:

shops
  - id (int,auto-increment,index)
  - domain (string)

products
  - id (int,index)
  - name (string)
  - price (float)

product_shop
  - id (int,index)
  - product_id (int,foreign_key)
  - shop_id (int,foreign_key)

现在我想创建一个迁移,在其中使用 product_shop.product_id 将约束设置为 product_shop.shop_idonDelete: CASCADE,onUpdate: CASCADE。因此,无论我在何处或以何种方式删除产品 - 如果我删除一个产品,所有相关的枢轴也将被删除

但是我应该如何更改 migration->up()migration->down() 中的约束?

class EstablishConstraints extends Migration
{

  public function up()
  {
    Schema::table('product_shop',function (Blueprint $table) {
      $table->someMagic('product_id')->moreMagic('CASCADE');  // What here?
      $table->someMagic('shop_id')->moreMagic('CASCADE'); // ...and here?
    });
  }

  public function down()
  {
    Schema::table('product_shop',function (Blueprint $table) {
      $table->reverseMagic('product_id');  // How to reverse it?
      $table->reverseMagic('shop_id'); // ...on both columns?
    });

  }
}

谢谢:)

解决方法

找到解决方案:

Action ac= new Action(driver);
Ac.moveToElement(dropdown).moveToElement(User).click().build().perform();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。