РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
130 of 1392 menu

Метод replicate

Метод replicate применяется к существующей модели Eloquent и возвращает новый экземпляр модели с теми же атрибутами, кроме полей id и полей с временными метками created_at и updated_at. По умолчанию метод не копирует связи модели, а также не сохраняет новую копию автоматически. Он подготавливает новую модель для последующего сохранения.

Метод принимает необязательный параметр - массив атрибутов, которые нужно исключить из копирования. Это полезно, когда необходимо создать копию записи с небольшими изменениями.

Синтаксис

<?php $newModel = $existingModel->replicate($excludeAttributes); $newModel->save(); ?>

Пример

Давайте создадим копию статьи с id равным 1 и сохраним её в базу данных:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function replicateArticle() { $article = Article::find(1); $newArticle = $article->replicate(); $newArticle->save(); echo "New article ID: " . $newArticle->id; } } ?>

Результат выполнения кода:

"New article ID: 2"

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

Пример

Давайте создадим копию статьи, но исключим из копирования поле slug и поле title, чтобы задать им новые значения:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function replicateWithExclude() { $article = Article::find(1); $newArticle = $article->replicate(['slug', 'title']); $newArticle->title = 'New Article Title'; $newArticle->slug = 'new-article-slug'; $newArticle->save(); echo $newArticle->title; } } ?>

Результат выполнения кода:

"New Article Title"

Пример

Давайте скопируем статью вместе с её комментариями, используя связи:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function replicateWithRelations() { $article = Article::with('comments')->find(1); $newArticle = $article->replicate(); $newArticle->save(); foreach ($article->comments as $comment) { $newComment = $comment->replicate(); $newComment->article_id = $newArticle->id; $newComment->save(); } echo "Copied " . $article->comments->count() . " comments"; } } ?>

Результат выполнения кода:

"Copied 5 comments"

Смотрите также

  • метод save,
    который сохраняет модель в базу данных
  • метод refresh,
    который обновляет модель из базы данных
  • метод toArray,
    который преобразует модель в массив
  • метод isDirty,
    который проверяет изменения в модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить