在Laravel 4.2中,我有以下代码:
$thingIds = [];
foreach ($this->things as $thing) {
$thingIds[] = $thing->id;
}
$thong->things()->sync($thingIds);
$thong->save();
这似乎对我有用,但是在我的数据透视表中,我有一个order
列,没有正确更新/同步。对于数据透视表中的每个项目,订单设置为1,但我希望订单能够代表$thingIds
中的ID顺序。
这可能吗?
是否可以使用->sync()
?
在评论中提出建议后,我也尝试了以下代码:
$thingIds = [];
foreach ($this->things as $index => $thing) {
$thingIds[$thing->id] = ['order' => $index];
}
$thong->things()->sync($thingIds);
$thong->save();
我试过了
$thingIds = [];
$order = [];
foreach ($this->things as $index => $thing) {
$thingIds[] = $thing->id;
$order[] = ['order' => $index];
}
$thong->things()->sync(array_combine($thingIds, $order));
$thong->save();
但这些都不起作用(数据透视表中的每个项目的顺序仍为1)。谁能解释我做错了什么?
如果我一次附加一个,就像这样:
foreach ($this->things as $index => $thing) {
$thong->things()->attach($thing, ['order' => $index]);
}
订单在数据透视表中正确显示。如何在仍然使用->sync()
的情况下获得相同的效果?