我在laravel中与一个数据透视对象/表有很多关系。 我想在此表中创建一个条目的副本,保留所有数据透视属性(我有关系的额外属性)并创建一个新的id。
是否可以使用laravel或者我应该将一些原始sql破解到数据库中?
答案 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);
}
}
请注意,这仅适用于与数据透视表的多对多关系。