---
description: >-
  https://www.itsolutionstuff.com/post/laravel-9-crud-application-tutorial-exampleexample.html
---

# Laravel 9 CRUD Application Tutorial Example

Hi All,

In this tutorial, we will cover a laravel 9 crud operation example. Here, we will implement a build a laravel 9 crud application from scratch. I explained simply step by step laravel 9 crud application for beginners. Follow bellow tutorial step of crud operation in laravel 9.

Laravel 9 is just released by yesterday, Laravel 9 gives several new features and LTS support. So if you are new to laravel then this tutorial will help you create an insert update delete application in laravel 9.

In this example, we will create a product crud application using laravel 9. we will create a products table with name and detail column using laravel 9 migration, then we will create routes, controller, view, and model files for the product module. we will use bootstrap 5 for design now. so let's follow the below step to create a crud operation with laravel 9.

![](https://www.itsolutionstuff.com/upload/laravel-9-crud.png)

**Step 1: Install Laravel 9**

Let us begin the tutorial by installing a new laravel 9 application. if you have already created the project, then skip following step.

```
composer create-project laravel/laravel example-app
```

**Step 2: Database Configuration**

In second step, we will make database configuration, we need to add database name, mysql username and password. So let's open .env file and fill all details like as bellow:

.env

```
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=here your database name(blog)DB_USERNAME=here database username(root)DB_PASSWORD=here database password(root)
```

Read Also: [Laravel 9 Form Validation Tutorial Example](https://www.itsolutionstuff.com/post/laravel-9-form-validation-tutorial-exampleexample.html)

**Step 3: Create Migration**

Here, we will create "products" table using laravel migration. so let's use following command to create migration file.

```
php artisan make:migration create_products_table --create=products
```

After this command you will find one file in the following path "database/migrations" and you have to put bellow code in your migration file for creating the products table.

```
<?php  use Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;  return new class extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('products', function (Blueprint $table) {            $table->id();            $table->string('name');            $table->text('detail');            $table->timestamps();        });    }      /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('products');    }};
```

Now you have to run this migration by the following command:

```
php artisan migrate
```

**Step 4: Create Controller and Model**

In this step, now we should create new resource controller as ProductController. So run bellow command and create new controller. bellow controller for create resource controller.

```
php artisan make:controller ProductController --resource --model=Product
```

After the bellow command, you will find a new file in this path "app/Http/Controllers/ProductController.php".

In this controller will create seven methods by default as bellow methods:

1\)index()

2\)create()

3\)store()

4\)show()

5\)edit()

6\)update()

7\)destroy()

So, let's copy bellow code and put on ProductController.php file.

app/Http/Controllers/ProductController.php

```
<?php  namespace App\Http\Controllers;  use App\Models\Product;use Illuminate\Http\Request;  class ProductController extends Controller{    /**     * Display a listing of the resource.     *     * @return \Illuminate\Http\Response     */    public function index()    {        $products = Product::latest()->paginate(5);              return view('products.index',compact('products'))            ->with('i', (request()->input('page', 1) - 1) * 5);    }      /**     * Show the form for creating a new resource.     *     * @return \Illuminate\Http\Response     */    public function create()    {        return view('products.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',            'detail' => 'required',        ]);              Product::create($request->all());               return redirect()->route('products.index')                        ->with('success','Product created successfully.');    }      /**     * Display the specified resource.     *     * @param  \App\Models\Product  $product     * @return \Illuminate\Http\Response     */    public function show(Product $product)    {        return view('products.show',compact('product'));    }      /**     * Show the form for editing the specified resource.     *     * @param  \App\Models\Product  $product     * @return \Illuminate\Http\Response     */    public function edit(Product $product)    {        return view('products.edit',compact('product'));    }      /**     * Update the specified resource in storage.     *     * @param  \Illuminate\Http\Request  $request     * @param  \App\Models\Product  $product     * @return \Illuminate\Http\Response     */    public function update(Request $request, Product $product)    {        $request->validate([            'name' => 'required',            'detail' => 'required',        ]);              $product->update($request->all());              return redirect()->route('products.index')                        ->with('success','Product updated successfully');    }    /**     * Remove the specified resource from storage.     *     * @param  \App\Models\Product  $product     * @return \Illuminate\Http\Response     */    public function destroy(Product $product)    {        $product->delete();               return redirect()->route('products.index')                        ->with('success','Product deleted successfully');    }}
```

Ok, so after run bellow command you will find "app/Models/Product.php" and put bellow content in Product.php file:

app/Models/Product.php

```
<?php  namespace App\Models;  use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;  class Product extends Model{    use HasFactory;      protected $fillable = [        'name', 'detail'    ];}
```

**Step 5: Add Resource Route**

Here, we need to add resource route for product crud application. so open your "routes/web.php" file and add following route.

[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1079/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=4738708738114784\&c_id=1079\&l_id=10016\&url=https%3A%2F%2Fwww.directrelief.org%2Femergency%2Fukraine-crisis%2F\&ffid=1\&co=VN)[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1093/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=4738708738114784\&c_id=1093\&l_id=10016\&url=https%3A%2F%2Fwww.directrelief.org%2Femergency%2Fukraine-crisis%2F\&ffid=1\&co=VN)[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1079/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=4738708738114784\&c_id=1079\&l_id=10016\&url=https%3A%2F%2Fwww.directrelief.org%2Femergency%2Fukraine-crisis%2F\&ffid=1\&co=VN)

routes/web.php

```
<?php  use Illuminate\Support\Facades\Route;  use App\Http\Controllers\ProductController;  /*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group that| contains the "web" middleware group. Now create something great!|*/  Route::resource('products', ProductController::class);
```

**Step 6: Add Blade Files**

In last step. In this step we have to create just blade files. So mainly we have to create layout file and then create new folder "products" then create blade files of crud app. So finally you have to create following bellow blade file:

1\) layout.blade.php

2\) index.blade.php

3\) create.blade.php

4\) edit.blade.php

5\) show.blade.php

[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1094/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=6535670322094141\&c_id=1094\&l_id=10016\&url=https%3A%2F%2Ffundraise.pencilsofpromise.org%2Fgive%2F405130%2F%23!%2Fdonation%2Fcheckout\&ffid=1\&co=VN)[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1079/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=6535670322094141\&c_id=1079\&l_id=10016\&url=https%3A%2F%2Fwww.directrelief.org%2Femergency%2Fukraine-crisis%2F\&ffid=1\&co=VN)[![](https://go.ezodn.com/charity/http/charity-ads.s3.amazonaws.com/charity_ads/1094/300x250.png)](https://go.ezodn.com/ads/charity/proxy?p_id=83018f38-5264-4663-77fe-7bf4757ad23b\&d_id=77568\&imp_id=6535670322094141\&c_id=1094\&l_id=10016\&url=https%3A%2F%2Ffundraise.pencilsofpromise.org%2Fgive%2F405130%2F%23!%2Fdonation%2Fcheckout\&ffid=1\&co=VN)So let's just create following file and put bellow code.

resources/views/products/layout.blade.php

```
<!DOCTYPE html><html><head>    <title>Laravel 9 CRUD Application - ItSolutionStuff.com</title>    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"></head><body>    <div class="container">    @yield('content')</div>    </body></html>
```

resources/views/products/index.blade.php

```
@extends('products.layout') @section('content')    <div class="row">        <div class="col-lg-12 margin-tb">            <div class="pull-left">                <h2>Laravel 9 CRUD Example from scratch - ItSolutionStuff.com</h2>            </div>            <div class="pull-right">                <a class="btn btn-success" href="{{ route('products.create') }}"> Create New Product</a>            </div>        </div>    </div>       @if ($message = Session::get('success'))        <div class="alert alert-success">            <p>{{ $message }}</p>        </div>    @endif       <table class="table table-bordered">        <tr>            <th>No</th>            <th>Name</th>            <th>Details</th>            <th width="280px">Action</th>        </tr>        @foreach ($products as $product)        <tr>            <td>{{ ++$i }}</td>            <td>{{ $product->name }}</td>            <td>{{ $product->detail }}</td>            <td>                <form action="{{ route('products.destroy',$product->id) }}" method="POST">                       <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>                        <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a>                       @csrf                    @method('DELETE')                          <button type="submit" class="btn btn-danger">Delete</button>                </form>            </td>        </tr>        @endforeach    </table>      {!! $products->links() !!}      @endsection
```

resources/views/products/create.blade.php

```
@extends('products.layout')  @section('content')<div class="row">    <div class="col-lg-12 margin-tb">        <div class="pull-left">            <h2>Add New Product</h2>        </div>        <div class="pull-right">            <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>        </div>    </div></div>   @if ($errors->any())    <div class="alert alert-danger">        <strong>Whoops!</strong> There were some problems with your input.<br><br>        <ul>            @foreach ($errors->all() as $error)                <li>{{ $error }}</li>            @endforeach        </ul>    </div>@endif   <form action="{{ route('products.store') }}" method="POST">    @csrf       <div class="row">        <div class="col-xs-12 col-sm-12 col-md-12">            <div class="form-group">                <strong>Name:</strong>                <input type="text" name="name" class="form-control" placeholder="Name">            </div>        </div>        <div class="col-xs-12 col-sm-12 col-md-12">            <div class="form-group">                <strong>Detail:</strong>                <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail"></textarea>            </div>        </div>        <div class="col-xs-12 col-sm-12 col-md-12 text-center">                <button type="submit" class="btn btn-primary">Submit</button>        </div>    </div>   </form>@endsection
```

resources/views/products/edit.blade.php

```
@extends('products.layout')   @section('content')    <div class="row">        <div class="col-lg-12 margin-tb">            <div class="pull-left">                <h2>Edit Product</h2>            </div>            <div class="pull-right">                <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>            </div>        </div>    </div>       @if ($errors->any())        <div class="alert alert-danger">            <strong>Whoops!</strong> There were some problems with your input.<br><br>            <ul>                @foreach ($errors->all() as $error)                    <li>{{ $error }}</li>                @endforeach            </ul>        </div>    @endif      <form action="{{ route('products.update',$product->id) }}" method="POST">        @csrf        @method('PUT')            <div class="row">            <div class="col-xs-12 col-sm-12 col-md-12">                <div class="form-group">                    <strong>Name:</strong>                    <input type="text" name="name" value="{{ $product->name }}" class="form-control" placeholder="Name">                </div>            </div>            <div class="col-xs-12 col-sm-12 col-md-12">                <div class="form-group">                    <strong>Detail:</strong>                    <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail">{{ $product->detail }}</textarea>                </div>            </div>            <div class="col-xs-12 col-sm-12 col-md-12 text-center">              <button type="submit" class="btn btn-primary">Submit</button>            </div>        </div>       </form>@endsection
```

resources/views/products/show.blade.php

```
@extends('products.layout')  @section('content')    <div class="row">        <div class="col-lg-12 margin-tb">            <div class="pull-left">                <h2> Show Product</h2>            </div>            <div class="pull-right">                <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>            </div>        </div>    </div>       <div class="row">        <div class="col-xs-12 col-sm-12 col-md-12">            <div class="form-group">                <strong>Name:</strong>                {{ $product->name }}            </div>        </div>        <div class="col-xs-12 col-sm-12 col-md-12">            <div class="form-group">                <strong>Details:</strong>                {{ $product->detail }}            </div>        </div>    </div>@endsection
```

**Run Laravel App:**

All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:

```
php artisan serve
```

Now, Go to your web browser, type the given URL and view the app output:

Read Also: [Laravel 9 Import Export Excel and CSV File Tutorial](https://www.itsolutionstuff.com/post/laravel-9-import-export-excel-and-csv-file-tutorialexample.html)

```
http://localhost:8000/products
```

You will see layout as like bellow:

List Page:

![](https://www.itsolutionstuff.com/upload/laravel-9-crud-list.png)

Add Page:

![](https://www.itsolutionstuff.com/upload/laravel-9-crud-create.png)

Edit Page:

![](https://www.itsolutionstuff.com/upload/laravel-9-crud-edit.png)

Show Page:

![](https://www.itsolutionstuff.com/upload/laravel-9-crud-show.png)

You can download code from git: [Download Code from Github](https://github.com/savanihd/Laravel-9-CRUD)

I hope it can help you...
