Laravel - 将列添加到现有数据透视表并添加MUL键

时间:2018-02-23 10:26:41

标签: php sql laravel

我有一个Laravel数据透视表,其中包含多个主键:" order_id"," product_id"," variation_id"。

我需要添加一个名为" id"的新列。我这样做的表如下:

public function up()
    {
        Schema::table('order_product', function (Blueprint $table) 
        {
            $table->integer('id')->unsigned()->after('variation_sku');
        });
    }

我的原始迁移文件如下所示:

public function up()
    {
        Schema::create('order_product', function (Blueprint $table) 
        {
            $table->integer('order_id')->unsigned()->index();
            $table->foreign('order_id')->references('order_id')->on('orders')->onDelete('cascade');
            $table->integer('product_id')->unsigned()->index();
            $table->foreign('product_id')->references('product_id')->on('products')->onDelete('cascade');
            $table->integer('variation_id')->unsigned()->index()->nullable();
            $table->jsonb('variation')->nullable();
            $table->integer('qty');
            $table->string('variation_status')->default('bakery');
            $table->timestamps();
            $table->softDeletes();
            $table->primary(['order_id', 'product_id', 'variation_id']);
        });
    }

此迁移包括我的3个复合键。

我现在需要添加新列" id"并将此列添加到组合键。

我在Laravel文档中找不到任何内容,并怀疑这可能无法实现,因为它可能会影响此表中的过去记录。

1 个答案:

答案 0 :(得分:2)

您可以删除主键,然后创建一个新键:

public function up()
{
    Schema::table('order_product', function (Blueprint $table) 
    {
        $table->integer('id')->unsigned()->after('variation_sku');
        $table->dropPrimary();
        $table->primary(['id', 'order_id', 'product_id', 'variation_id']);
    });
}