laravel - 没有自动排序的数据透视表 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();
});
}
解决方案
添加主键并使用 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();
});
}
推荐阅读
- r - 用 R 中的向量替换 data.frame 的一些值
- ios - Receigen Xcode 10.1 - 未知类型名称'UIDevice'
- node.js - 浏览器/防病毒软件可以阻止对直接 IP 地址而不是域名的请求吗?
- c++ - 功能定义不允许 RetailItem
- dialogflow-es - 使用 Dialogflow 时,后续意图与在父意图中需要参数有什么区别?
- kotlin - 如何在 Workspace 标题中创建搜索字段?
- c++11 - 将节点(包含 str 和 bool 值)插入数组 C++
- sql - 将列名声明为变量
- java - 使用 Jackson GWT 访问嵌套的 JSON 值
- java - 查找数据库结构中子节点的数量