Laravel - 如何使用其属性克隆关系数据透视图?

时间:2016-11-27 05:37:13

标签: php laravel laravel-5

我在laravel中与一个数据透视对象/表有很多关系。 我想在此表中创建一个条目的副本,保留所有数据透视属性(我有关系的额外属性)并创建一个新的id。

是否可以使用laravel或者我应该将一些原始sql破解到数据库中?

1 个答案:

答案 0 :(得分:1)

在Laravel 5.4中,如果要克隆多对多模型,包括其在数据透视表中的关系和额外属性,则需要修改https://stackoverflow.com/a/34032304/309383中提供的原始解决方案,如下所示:

$model = User::find($id);

$model->load('invoices');

$newModel = $model->replicate();
$newModel->push();

// Once the model has been saved with a new ID, we can get its children
foreach ($newModel->getRelations() as $relation => $items) {
    foreach ($items as $item) {
        // Now we get the extra attributes from the pivot tables, but
        // we intentionally leave out the foreignKey, as we already 
        // have it in the newModel
        $extra_attributes = array_except($item->pivot->getAttributes(), $item->pivot->getForeignKey());
        $newModel->{$relation}()->attach($item, $extra_attributes);
    }
}

请注意,这仅适用于与数据透视表的多对多关系。