基本的なCRUDの作成

Laravelで基本的な機能となるCRUDを作成、CRUDはCreate, Read, Update, Deleteの略。
データの一覧表示、新規データの作成、データの表示、データの更新、データの削除はアプリケーションには必須と言える機能。
ページ遷移のあるベーシックなサイトを作る。

  • Step 1 – Download Laravel 9 App
  • Step 2 – Setup Database with App
  • Step 3 – Create Company Model & Migration For CRUD App
  • Step 4 – Create Company Controller By Artisan Command
  • Step 5 – Create Routes
  • Step 6 – Create Blade Views File
    1. Make Directory Name Companies
  • index.blade.php
    1. create.blade.php
    2. edit.blade.php
  • Step 7 – Run Laravel CRUD App on Development Server

Step 1 – Download Laravel 9 App

# composer create-project –prefer-dist laravel/laravel:^9.0 laravel-9-crud
# cd laravel-9-crud

Step 2 – Setup Database with App

edit .env file
  DB_CONNECTION=mysql
  DB_HOST=127.0.0.1
  DB_PORT=3306
  DB_DATABASE=laravel-9-crud
  DB_USERNAME=root
  DB_PASSWORD=database-password

*make database  ‘laravel-9-crud’ with phpMyAdmin

Step 3 – Create Company Model & Migration For CRUD App

# php artisan make:model Company -m
maked laravel-9-crud/database/migrations/xxxx_create_companies_table.php
  and app/Models/Company.php
edit xxxx_create_companies_table.php
  public function up()
  {
    Schema::create('companies', function (Blueprint $table) {
      $table->id();
      $table->string('name');
      $table->string('email');
      $table->string('address');
      $table->timestamps();
    });
  }
# php artisan migrate
edit app/Models/Company.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
  use HasFactory;
  protected $fillable = ['name', 'email', 'address'];
}

Step 4 – Create Company Controller

# php artisan make:controller CompanyController
edit /Http/controllers and open the CompanyController.php
<?php
namespace App\Http\Controllers;
use App\Models\Company;
use Illuminate\Http\Request;
class CompanyController extends Controller
{
  /**
  * Display a listing of the resource.
  *
  * @return \Illuminate\Http\Response
  */
  public function index()
  {
    $companies = Company::orderBy('id','desc')->paginate(5);
    return view('companies.index', compact('companies'));
  }
  /**
  * Show the form for creating a new resource.
  *
  * @return \Illuminate\Http\Response
  */
  public function create()
  {
    return view('companies.create');
  }
  /**
  * Store a newly created resource in storage.
  *
  * @param \Illuminate\Http\Request $request
  * @return \Illuminate\Http\Response
  */
  public function store(Request $request)
  {
    $request->validate([
      'name' => 'required',
      'email' => 'required',
      'address' => 'required',
    ]);
    Company::create($request->post());
    return redirect()->route('companies.index')->with('success','Company has been created successfully.');
  }
  /**
  * Display the specified resource.
  *
  * @param \App\company $company
  * @return \Illuminate\Http\Response
  */
  public function show(Company $company)
  {
    return view('companies.show',compact('company'));
  }
  /**
  * Show the form for editing the specified resource.
  *
  * @param \App\Company $company
  * @return \Illuminate\Http\Response
  */
  public function edit(Company $company)
  {
    return view('companies.edit',compact('company'));
  }
  /**
  * Update the specified resource in storage.
  *
  * @param \Illuminate\Http\Request $request
  * @param \App\company $company
  * @return \Illuminate\Http\Response
  */
  public function update(Request $request, Company $company)
  {
    $request->validate([
      'name' => 'required',
      'email' => 'required',
      'address' => 'required',
    ]);
    $company->fill($request->post())->save();
    return redirect()->route('companies.index')->with('success','Company Has Been updated successfully');
  }
  /**
  * Remove the specified resource from storage.
  *
  * @param \App\Company $company
  * @return \Illuminate\Http\Response
  */
  public function destroy(Company $company)
  {
    $company->delete();
    return redirect()->route('companies.index')->with('success','Company has been deleted successfully');
  }
}

Step 5 – Create Routes

add routes/web.php
use App\Http\Controllers\CompanyController;
Route::resource(‘companies’, CompanyController::class);

Step 6 – Create Blade Views File

Make Directory resources/views/companies/
make /resources/views/companies/index.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Laravel 9 CRUD Tutorial Example</title>
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" >
</head>
<body>
 <div class="container mt-2">
  <div class="row">
   <div class="col-lg-12 margin-tb">
    <div class="pull-left">
     <h2>Laravel 9 CRUD Example Tutorial</h2>
    </div>
    <div class="pull-right mb-2">
     <a class="btn btn-success" href="{{ route('companies.create') }}"> Create Company</a>
    </div>
   </div>
  </div>
  @if ($message = Session::get('success'))
   <div class="alert alert-success">
    <p>{{ $message }}</p>
   </div>
  @endif
  <table class="table table-bordered">
   <thead>
    <tr>
     <th>S.No</th>
     <th>Company Name</th>
     <th>Company Email</th>
     <th>Company Address</th>
     <th width="280px">Action</th>
    </tr>
   </thead>
   <tbody>
    @foreach ($companies as $company)
     <tr>
      <td>{{ $company->id }}</td>
      <td>{{ $company->name }}</td>
      <td>{{ $company->email }}</td>
      <td>{{ $company->address }}</td>
      <td>
       <form action="{{ route('companies.destroy',$company->id) }}" method="Post">
        <a class="btn btn-primary" href="{{ route('companies.edit',$company->id) }}">Edit</a>
        @csrf
        @method('DELETE')
        <button type="submit" class="btn btn-danger">Delete</button>
       </form>
      </td>
     </tr>
    @endforeach
   </tbody>
  </table>
  {!! $companies->links() !!}
 </div>
</body>
</html>
make /resources/views/companies/create.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Add Company Form - Laravel 9 CRUD</title>
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
 <div class="container mt-2">
  <div class="row">
   <div class="col-lg-12 margin-tb">
    <div class="pull-left mb-2">
     <h2>Add Company</h2>
    </div>
    <div class="pull-right">
     <a class="btn btn-primary" href="{{ route('companies.index') }}"> Back</a>
    </div>
   </div>
  </div>
  @if(session('status'))
  <div class="alert alert-success mb-1 mt-1">
   {{ session('status') }}
  </div>
  @endif
  <form action="{{ route('companies.store') }}" method="POST" enctype="multipart/form-data">
   @csrf
   <div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Name:</strong>
      <input type="text" name="name" class="form-control" placeholder="Company Name">
      @error('name')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Email:</strong>
      <input type="email" name="email" class="form-control" placeholder="Company Email">
      @error('email')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Address:</strong>
      <input type="text" name="address" class="form-control" placeholder="Company Address">
      @error('address')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <button type="submit" class="btn btn-primary ml-3">Submit</button>
   </div>
  </form>
 </div>
</body>
make /resources/views/companies/edit.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Edit Company Form - Laravel 9 CRUD Tutorial</title>
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
 <div class="container mt-2">
  <div class="row">
   <div class="col-lg-12 margin-tb">
    <div class="pull-left">
     <h2>Edit Company</h2>
    </div>
    <div class="pull-right">
     <a class="btn btn-primary" href="{{ route('companies.index') }}" enctype="multipart/form-data">Back</a>
    </div>
   </div>
  </div>
  @if(session('status'))
  <div class="alert alert-success mb-1 mt-1">
   {{ session('status') }}
  </div>
  @endif
  <form action="{{ route('companies.update',$company->id) }}" method="POST" enctype="multipart/form-data">
   @csrf
   @method('PUT')
   <div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Name:</strong>
      <input type="text" name="name" value="{{ $company->name }}" class="form-control" placeholder="Company name">
      @error('name')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Email:</strong>
      <input type="email" name="email" class="form-control" placeholder="Company Email" value="{{ $company->email }}">
      @error('email')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
     <div class="form-group">
      <strong>Company Address:</strong>
      <input type="text" name="address" value="{{ $company->address }}" class="form-control" placeholder="Company Address">
      @error('address')
      <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
      @enderror
     </div>
    </div>
    <button type="submit" class="btn btn-primary ml-3">Submit</button>
   </div>
  </form>
 </div>
</body>
</html>

Step 7 – Run Server

# php artisan serve –host=192.168.0.16 –port=8000
browser access http://192.168.0.16:8000/companies

Previous article

SDRとして無線通信を受信

Next article

Laravelの構造