Laravel

Laravelで登録済みデータを複製(コピー)して新規登録画面を表示

登録済みのデータ一覧が表示されてる画面からテーブルデータのid(主キー)を使って、複製(コピー)して新規登録画面を表示する方法を紹介します。

社員テーブル(employees)構造

社員名、部署名が登録されている社員テーブル(employees)を用意しました。

名前 説明
id 主キー
employee_name 社員名
employee_department 部署名

社員テーブル(employees)データ用Model

※Employee.phpファイルを用意します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{

}

社員テーブル(employees)データ一覧画面、複製(コピー)して新規登録画面のControllerの記述

※社員テーブル(employees)データ一覧画面、複製(コピー)して新規登録画面を表示するEmployeesController.phpファイルを用意します。

Employeeモデルの読込

※Employeeモデルの読込を行い、EmployeeController内に「社員テーブル(employees)データ一覧画面、複製(コピー)して新規登録画面等の処理」を記述します。

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

use App\Employee;   //Employeeモデルを使用
use Validator;  //バリデーションを使用
use DB;

class EmployeeController extends Controller
{


/* 社員テーブル(employees)データ一覧画面、複製(コピー)して新規登録画面等の処理を記述 */


}

社員テーブル(employees)データ一覧画面のControllerの記述

※社員テーブル(employees)データを全て取得します。

    public function index(Request $request)
    {
        $employees =  DB::table('employees')->get();

        return view('employees', [
            'employees' => $employees
        ]);
    }

複製(コピー)して新規登録画面のControllerの記述

※社員テーブル(employees)からidが一致するデータを取得します。

    //複製登録画面
    public function copyregister($id)
    {
        $employee = Employee::find($id);

        return view('employeescopyregister', [
            'employee' => $employee,
        ]);
    }

社員テーブル(employees)データ一覧、複製(コピー)して新規登録画面のviewの記述

社員テーブル(employees)データ一覧画面のviewの記述

※社員テーブル(employees)データ一覧を表示するemployees.blade.phpファイルを用意します。

<table>
    <thead>
        <th>ID</th>
        <th>社員名</th>
        <th>部署名</th>
        <th>&nbsp;</th>
    </thead>
    <tbody>
        @foreach ($employees as $employee)
            <tr>
                <td class="table-text">
                    <div>{{ $employee->id }}</div>
                </td>
                <td class="table-text">
                    <div>{{ $employee->employee_name }}</div>
                </td>
                <td class="table-text">
                    <div>{{ $employee->employee_department }}</div>
                </td>
                <td class="table-text">
                <!-- 複製ボタン -->
                    <form action="{{ url('employeescopyregister/'.$employee->id) }}" method="POST">
                        @csrf
                        <button type="submit">
                            複製
                        </button>
                    </form>
                </td>
            </tr>
        @endforeach
    </tbody>
</table>

複製(コピー)して新規登録画面のviewの記述

※社員テーブル(employees)データ一覧画面から「複製」ボタンをクリック後の複製(コピー)して新規登録employeescopyregister.blade.phpファイルを用意します。

<div>
    @include('common.errors')
</div>

<form enctype="multipart/form-data" action="{{ url('employeesentry') }}" method="POST">
    @csrf

   <div>「<b>{{$employee->id}}</b>」データを複製して登録</div>

   <div>
   <label for="employee_name">社員名</label>
   <input type="text" name="employee_name" value="{{ old('employee_name', $employee->employee_name) }}">
   </div>

   <div>
   <label for="employee_department">部署名</label>
   <input type="text" name="employee_department" value="{{ old('employee_department', $employee->employee_department) }}">
   </div>

    <button type="submit">登録</button>

    <div>
    <a href="{{ url('/employees') }}">
       < 一覧に戻る
    </a>
    </div>
</form>

Routeの記述

※ページURLは必要に応じて変更して下さい。
本記事では記載してませんが複製(コピー)して新規登録画面でsubmit後「employeesentry」に送信し、EmployeeControllerにentry(登録処理)を記述して下さい。

//一覧表示
Route::get('/employees', 'EmployeesController@index');

//複製登録画面
Route::post('/employeescopyregister/{employees}','EmployeesController@copyregister');

//登録処理
Route::post('/employeesentry','EmployeesController@entry');

 
 
※流用される場合は自己責任でお願いします。