Laravel Image Upload CRUD (create, read, update, delete) example tutorial. Here, you will learn how to make CRUD(create, read, update, delete) with image upload web application in laravel.
This article helps you for creating crud (create, read, update, delete) with insert and fetch image file from database in laravel web application.
Laravel Crud with Image Upload Example
Just follow the below steps and create your laravel crud(create, read, update, delete) with image file upload:
- Install Laravel Fresh Setup
- Setup Database Credentials
- Generate Model and Migration
- Create Resource Route & Controller
- Create the blade view
- Start Development Server
Step 1: Install Laravel Fresh Setup
We need to install laravel fresh application using below command, Open your command prompt and run the below command :
composer create-project --prefer-dist laravel/laravel Blog
After successfully install laravel Application, Go to your project .env file and set up database credential and move next step.
Step 2: Setup Database Credentials
In this step, we will set database credentials in the .env file. Let’s open .env file:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=here your database name here DB_USERNAME=here database username here DB_PASSWORD=here database password here
Step 3: Generate Model and Migration
Now we will create table name products and it’s migration file. use the below command :
php artisan make:model Product-m
It command will create one model name Product and also create one migration file for Product table. After successfully run the command go to database/migrations file and put the below here :
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateProductsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('product_code'); $table->text('image'); $table->text('description'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('products'); } }
Next, migrate the table using the below command.
php artisan migrate
If you found any query builder error in command prompt go to => app\Providers\AppServiceProvider.php and put the below code here :
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
And then run this below command :
php artisan migrate:fresh
Now, add the fillable property inside Product.php file.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $fillable = [ 'title', 'product_code', 'image', 'description', ]; }
4). Create Resource Route & Controller
Create the ProductController using the below command.
php artisan make:controller ProductController --resource
This command will create a contoller name ProductController and also inside by default seven methods like index, store, create, update, destroy, show, edit.
Next, We need to add the resource route. Go to routes/web.php put the below routes here :
<?php Route::get('/', function () { return view('welcome'); }); Route::resource('products', 'ProductController');
Next open controller, Go to app/HTTP/Controller/ProductController and put the below code here :
<?php namespace App\Http\Controllers; use App\Product; use Illuminate\Http\Request; use Redirect; use PDF; class ProductController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $data['products'] = Product::orderBy('id','desc')->paginate(10); return view('product.list',$data); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('product.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'title' => 'required', 'product_code' => 'required', 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'description' => 'required', ]); if ($files = $request->file('image')) { $destinationPath = 'public/image/'; // upload path $profileImage = date('YmdHis') . "." . $files->getClientOriginalExtension(); $files->move($destinationPath, $profileImage); $insert['image'] = "$profileImage"; } $insert['title'] = $request->get('title'); $insert['product_code'] = $request->get('product_code'); $insert['description'] = $request->get('description'); Product::insert($request->all()); return Redirect::to('products') ->with('success','Greate! Product created successfully.'); } /** * Display the specified resource. * * @param \App\Product $product * @return \Illuminate\Http\Response */ public function show(Request $request) { } /** * Show the form for editing the specified resource. * * @param \App\Product $product * @return \Illuminate\Http\Response */ public function edit($id) { $where = array('id' => $id); $data['product_info'] = Product::where($where)->first(); return view('product.edit', $data); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Product $product * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $request->validate([ 'title' => 'required', 'product_code' => 'required', 'description' => 'required', ]); $update = ['title' => $request->title, 'description' => $request->description]; if ($files = $request->file('image')) { $destinationPath = 'public/image/'; // upload path $profileImage = date('YmdHis') . "." . $files->getClientOriginalExtension(); $files->move($destinationPath, $profileImage); $update['image'] = "$profileImage"; } $update['title'] = $request->get('title'); $update['product_code'] = $request->get('product_code'); $update['description'] = $request->get('description'); Product::where('id',$id)->update($update); return Redirect::to('products') ->with('success','Great! Product updated successfully'); } /** * Remove the specified resource from storage. * * @param \App\Product $product * @return \Illuminate\Http\Response */ public function destroy($id) { Product::where('id',$id)->delete(); return Redirect::to('products')->with('success','Product deleted successfully'); } }
Step 5: Create the blade view
We need to create some blade views files, Go to app/resources/views/ and create one folder name product. Inside the product folder create the following blade files.
Create the product folder. After successfully create product folder than create 4 following blade files.
- Layout.blade.php
- List.blade.php
- Create.blade.php
- Edit.blade.php
Layout.blade.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Laravel Crud with Image Upload Example - Tutsmake.com</title> <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <style> body{ background-color: #25274d; } .container{ background: #ff9b00; padding: 4%; border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } </style> </head> <body> <div class="container"> <br><br><br> @yield('content') </div> </body> </html>
List.blade.php
@extends('product.layout') @section('content') <a href="{{ route('products.create') }}" class="btn btn-success mb-2">Add</a> <br> <div class="row"> <div class="col-12"> <table class="table table-bordered" id="laravel_crud"> <thead> <tr> <th>Id</th> <th>Title</th> <th>Product Code</th> <th>Description</th> <th>Created at</th> <td colspan="2">Action</td> </tr> </thead> <tbody> @foreach($products as $product) <tr> <td>{{ $product->id }}</td> <td>{{ $product->title }}</td> <td>{{ $product->product_code }}</td> <td>{{ $product->description }}</td> <td>{{ date('Y-m-d', strtotime($product->created_at)) }}</td> <td><a href="{{ route('products.edit',$product->id)}}" class="btn btn-primary">Edit</a></td> <td> <form action="{{ route('products.destroy', $product->id)}}" method="post"> {{ csrf_field() }} @method('DELETE') <button class="btn btn-danger" type="submit">Delete</button> </form> </td> </tr> @endforeach </tbody> </table> {!! $products->links() !!} </div> </div> @endsection
Create.blade.php
@extends('product.layout') @section('content') <h2 style="margin-top: 12px;" class="text-center">Add Product</a></h2> <br> <form action="{{ route('products.store') }}" method="POST" name="add_product"> {{ csrf_field() }} <div class="row"> <div class="col-md-12"> <div class="form-group"> <strong>Title</strong> <input type="text" name="title" class="form-control" placeholder="Enter Title"> <span class="text-danger">{{ $errors->first('title') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Product Code</strong> <input type="text" name="product_code" class="form-control" placeholder="Enter Product Code"> <span class="text-danger">{{ $errors->first('product_code') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Description</strong> <textarea class="form-control" col="4" name="description" placeholder="Enter Description"></textarea> <span class="text-danger">{{ $errors->first('description') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Product Image</strong> <input type="file" name="image" class="form-control" placeholder=""> <span class="text-danger">{{ $errors->first('image') }}</span> </div> </div> <div class="col-md-12"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> </form> @endsection
Edit.blade.php
@extends('product.layout') @section('content') <h2 style="margin-top: 12px;" class="text-center">Edit Product</a></h2> <br> <form action="{{ route('products.update', $product_info->id) }}" method="POST" name="update_product"> {{ csrf_field() }} @method('PATCH') <div class="row"> <div class="col-md-12"> <div class="form-group"> <strong>Title</strong> <input type="text" name="title" class="form-control" placeholder="Enter Title" value="{{ $product_info->title }}"> <span class="text-danger">{{ $errors->first('title') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Product Code</strong> <input type="text" name="product_code" class="form-control" placeholder="Enter Product Code" value="{{ $product_info->product_code }}"> <span class="text-danger">{{ $errors->first('product_code') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Description</strong> <textarea class="form-control" col="4" name="description" placeholder="Enter Description" >{{ $product_info->description }}</textarea> <span class="text-danger">{{ $errors->first('description') }}</span> </div> </div> <div class="col-md-12"> <div class="form-group"> <strong>Product Image</strong> @if($product_info->image) <img id="original" src="{{ url('public/image/'.$product_info->image) }}" height="70" width="70"> @endif <input type="text" name="image" class="form-control" placeholder="" value="{{ $product_info->image }}"> <span class="text-danger">{{ $errors->first('image') }}</span> </div> </div> <div class="col-md-12"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> </form> @endsection
Step 6: Run Development Server
In this step, we will use the PHP artisan serve command. It will start your server locally
php artisan serve
If you want to run the project diffrent port so use this below command
php artisan serve --port=8080
Now we are ready to run our example so run bellow command to quick run.
http://localhost:8000/products
Conclusion
In this post, you have learned how to make crud app with image upload in laravel. Our examples run quickly.
You may like
- Laravel Tutorial From Scratch | Step By Step
- Laravel Ajax CRUD(DataTables Js) Tutorial Example
- Upload Files/Images to Amazon s3 Cloud Using Laravel Filesystem
- Laravel Ajax CRUD (Operation) Application Example
- Laravel Angular JS CRUD Example Tutorial
- Ajax Image Upload In Laravel Tutorial Example From Scratch
- Laravel CKEditor with Image Upload
- Laravel Intervention Upload Image Using Ajax – Example
- Upload Image to Database with Validation in laravel
If you have any questions or thoughts to share, use the comment form below to reach us.
can you tell me what kind of image(pdf, jpg, png) can upload? because I can’t upload imge
Thank you for your kindness
Very very useful articles. Thanks a lot and let God bless you!!!!! I’m interested in laravel articles and here I found many good codes.