Дублирование и клонирование записей с Laravel

Дублирование и клонирование записей с Laravel

Введение


Вам когда-нибудь приходилось дублировать или клонировать запись базы данных? Laravel предоставляет для этого очень удобную функцию, replicate которая берет модель Eloquent и создает копию, чтобы вы могли затем внести изменения и сохранить ее.


Вот пример того, как вы можете это использовать. Давайте представим, что у вас есть сообщение в блоге, и вы хотите сделать его копию, чтобы опубликовать ее снова.


Пример репликации с модификацией данных


Сначала возьмите оригинальную модель:


$post = Post::find(1);


Затем вызовите для него метод репликации:


$newPost = $post->replicate();


Теперь вы можете внести в модель любые необходимые изменения, а затем повторно сохранить ее.


$newPost->created_at = Carbon::now();
$newPost->save();


Все вместе это будет выглядеть так:


$post = Post::find(1);
$newPost = $post->replicate();
$newPost->created_at = Carbon::now();
$newPost->save();


Этот replicate метод действительно полезен для быстрого клонирования или дублирования записи базы данных.


Пример с репликацией связей


Если у вашей модели есть отношения, которые вы тоже хотите скопировать. Затем вы можете использовать метод push(), предоставленный Eloquent.


Метод push() извлечет вам вновь созданный идентификатор модели из базы данных, а затем вы сможете использовать объект модели для присоединения новых отношений.


$newClient = $client->replicate();
$newClient->push();

foreach ($client->roles as $role) {
    $clone->roles()->attach($role);
}

foreach ($client->categories as $category) {
    $client->categories()->attach($category);
}