Laravel – Как клонировать стержень отношений с его атрибутами?

У меня есть отношения «многие ко многим» в laravel со сводным объектом/таблицей. Я хочу создать копию одной записи в этой таблице, сохранив все основные свойства (у меня есть дополнительные атрибуты для отношений) и создав новый идентификатор.

Возможно ли это с laravel или мне просто взломать какой-нибудь необработанный sql в базе данных?


person sigmawf    schedule 27.11.2016    source источник
comment
Можете ли вы показать пример, что вы хотите сделать?   -  person Amit Gupta    schedule 27.11.2016


Ответы (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);
    }
}

Обратите внимание, что это относится только к отношениям «многие ко многим» со сводными таблицами.

person Dan H    schedule 26.02.2017