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

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

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

1. Создайте модели для обеих таблиц. Для этого выполните команду artisan:

php artisan make:model OldTable
php artisan make:model NewTable

2. Откройте файл модели "OldTable.php" и "NewTable.php" и установите имя таблицы, которое соответствует имени вашей таблицы:

protected $table = 'old_table';
protected $table = 'new_table';

3. В вашем представлении или шаблоне, где расположена кнопка, создайте форму, которая отправит POST запрос на определенный маршрут:

<form action="{{ route('moveData') }}" method="POST">
    @csrf
    <button type="submit">Перенести данные</button>
</form>

4. В файле маршрутов (routes/web.php) определите маршрут для переноса данных:

use AppHttpControllersTableController;

Route::post('/move-data', [TableController::class, 'moveData'])->name('moveData');

5. Создайте контроллер с помощью команды artisan:

php artisan make:controller TableController

6. Откройте файл "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', 'Данные успешно перенесены!');
}

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

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

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

GitGub репозиторий с файлами можно посмотреть по ссылке: [GitHub](https://github.com/laravel/framework)

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