在Laravel

时间:2017-10-05 10:55:30

标签: php laravel laravel-4

在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()的情况下获得相同的效果?

0 个答案:

没有答案