Введение
Вам когда-нибудь приходилось дублировать или клонировать запись базы данных? 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);
}