Laravel 8. Как при нажатии на кнопку перенести данные из одной таблицы в другую таблицу с такой же структурой?

В Laravel 8 вы можете легко перенести данные из одной таблицы в другую таблицу с помощью Eloquent моделей и Query Builder.

Для начала, убедитесь, что у вас есть две таблицы с одинаковой структурой, в которые вы хотите перенести данные. Предположим, что у вас есть таблица "oldtable" и "newtable" с теми же столбцами.

  1. Создайте модели для обеих таблиц. Для этого выполните команду artisan:
php artisan make:model OldTable
php artisan make:model NewTable
  1. Откройте файл модели "OldTable.php" и "NewTable.php" и установите имя таблицы, которое соответствует имени вашей таблицы:
protected $table = 'old_table';
protected $table = 'new_table';
  1. В вашем представлении или шаблоне, где расположена кнопка, создайте форму, которая отправит POST запрос на определенный маршрут:
<form action="{{ route('moveData') }}" method="POST">
    @csrf
    <button type="submit">Перенести данные</button>
</form>
  1. В файле маршрутов (routes/web.php) определите маршрут для переноса данных:
use AppHttpControllersTableController;

Route::post('/move-data', [TableController::class, 'moveData'])->name('moveData');
  1. Создайте контроллер с помощью команды artisan:
php artisan make:controller TableController
  1. Откройте файл "TableController.php" и добавьте метод "moveData", который будет обрабатывать POST запрос и переносить данные:
use AppModelsOldTable;
use AppModelsNewTable;

public function moveData()
{
    // Получите все записи из старой таблицы
    $data = OldTable::all();
    
    // Переберите каждую запись и создайте новую запись в новой таблице
    foreach ($data as $item) {
        NewTable::create($item->toArray());
    }
    
    // Удалите все записи из старой таблицы (если нужно)
    OldTable::truncate();
    
    return redirect()->back()->with('success', 'Данные успешно перенесены!');
}

В этом методе мы сначала получаем все записи из таблицы "oldtable" с помощью Eloquent модели "OldTable". Затем мы перебираем каждую запись и создаем новую запись в "newtable" с помощью метода "create()" Eloquent. Вызов метода "toArray()" преобразует модель в массив данных, который передается в метод "create()".

Мы также можем использовать метод "truncate()" для удаления всех записей в таблице "old_table" (если это нужно). Этот метод очищает таблицу и возвращает ее в исходное состояние.

Наконец, мы возвращаемся на предыдущую страницу с сообщением об успехе.

GitGub репозиторий с файлами можно посмотреть по ссылке: GitHub

Вот и все! Теперь, при нажатии на кнопку "Перенести данные" данные будут скопированы из таблицы "oldtable" в таблицу "newtable".