首页 > 解决方案 > 没有自动排序的数据透视表 attach()

问题描述

$item->categories()->attach([4,1,2,3]);

此代码按 1 2 3 4 插入记录顺序

在此处输入图像描述 我希望它像数组顺序一样插入!4 1 2 3 我是怎么做到的?

"laravel/framework": "5.5.*",

我为其添加了时间戳,但再次不起作用。

在此处输入图像描述

项目.php

public function categories()
{
        return $this->belongsToMany('App\Category')->withTimestamps();
}

分类.php

public function items()
{
        return $this->belongsToMany('App\Item');
}

枢轴迁移:

public function up()
{
        Schema::create('category_item', function (Blueprint $table) {

            $table->integer('item_id')->unsigned()->index();
            $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade');

            $table->integer('category_id')->unsigned()->index();

            $table->foreign('category_id')->references('id')
                        ->on('categories')->onDelete('restrict');

            $table->primary(['item_id', 'category_id']);

            $table->timestamps(); 

        });
}

标签: laraveleloquent

解决方案


添加主键并使用 sync() 保存数据而不是附加,除非您想继续添加条目。这是更新的迁移:

public function up()
{
    Schema::create('category_item', function (Blueprint $table) {

        $table->increments('id');

        $table->integer('item_id')->unsigned()->index();
        $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade');

        $table->integer('category_id')->unsigned()->index();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict');

        $table->unique(['item_id', 'category_id'], 'item_category_unique');

        $table->timestamps(); 

    });

}


推荐阅读