Skip to content
Advertisement

how to update existing product in laravel?

I’m trying to edit existing property’s listings in my laravel application using the following method

ListingController

    public function update(Request $request, $id)
    {

        $listing = Listing::where('id', $id)->first();

        $listing->title = $request->get('title');
        $listing->price = $request->get('price');
        $listing->address = $request->get('address');
        $listing->rooms = $request->get('rooms');
        $listing->city = $request->get('city');
        $listing->state = $request->get('state');
        $listing->zip_code = $request->get('zip_code');
        $listing->area = $request->get('area');
        $listing->balcony = $request->get('balcony');
        $listing->bedrooms = $request->get('bedrooms');
        $listing->bathrooms = $request->get('bathrooms');
        $listing->toilet = $request->get('toilet');
        $listing->bathroom_type = $request->get('bathroom_type');
        $listing->kitchen = $request->get('kitchen');
        $listing->parking_space = $request->get('parking_space');
        $listing->description = $request->get('description');
        $listing->featured = $request->get('featured');
        $listing->status = $request->get('status');
        $listing->type = $request->get('type');
        $listing->water_supply = $request->get('water_supply');
        $listing->power_supply = $request->get('power_supply');
        $listing->save();

        return redirect('/home')->with('success', 'Listing updated!');
    }

the edit.blade.php

@extends('../layouts/home')

@section('content')

<!-- Titlebar
================================================== -->
<div id="titlebar" class="submit-page">
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <h2><i class="fa fa-plus-circle"></i> Add Property</h2>
            </div>
        </div>
    </div>
</div>


<!-- Content
================================================== -->
<div class="container">
<div class="row">

    <!-- Submit Page -->
    <div class="col-md-12">
        @if ($errors->any())

            <div class="notification notice large margin-bottom-55">
                 @foreach ($errors->all() as $error)
                    <li>{{$error}}</li>
                 @endforeach

                @if(session()->has('message'))
                    <div class="alert alert-success">
                        {{ session()->get('message') }}
                    </div>
                @endif

                @if (session('status'))
                    <div class="alert alert-success" role="alert">
                        {{ session('status') }}
                    </div>
                @endif
            </div>
        @endif
        <form action="{{ route('listings.update', $listing->id) }}" method="post" enctype="multipart/form-data">
            @method('PATCH')
            @csrf
            <div class="submit-page">

            <!-- Section -->
            <h3>Basic Information</h3>
            <div class="submit-section">


                <!-- Title -->
                <div class="form">
                    <h5>Property Title <i class="tip" data-tip-content="Type title that will also contains an unique feature of your property (e.g. renovated, air contidioned)"></i></h5>
                    <input class="search-field" type="text" value="{{ $listing->title }}" name="title" />
                    @if($errors->has('title'))
                    <span class="help-block text-danger">{{ $errors->first('title') }}</span>
                    @endif
                </div>

                <!-- Row -->
                <div class="row with-forms">

                    <!-- Status -->
                    <div class="col-md-4">
                        <h5>Status</h5>
                        <select class="chosen-select-no-single" name="status">
                            <option label="blank"></option>
                            <option>For Sale</option>
                            <option>For Rent</option>
                        </select>
                        @if($errors->has('status'))
                        <span class="help-block text-danger">{{ $errors->first('status') }}</span>
                        @endif
                    </div>

                    <!-- Type -->
                    <div class="col-md-4">
                        <h5>Type</h5>
                        <select class="chosen-select-no-single" name="type">
                            <option label="blank"></option>
                            <option>Apartment</option>
                            <option>House</option>
                            <option>Commercial</option>
                            <option>Garage</option>
                            <option>Lot</option>
                        </select>
                        @if($errors->has('type'))
                        <span class="help-block text-danger">{{ $errors->first('type') }}</span>
                        @endif
                    </div>

                    <div class="col-md-4">
                        <h5>Featured<span></span></h5>
                        <select class="chosen-select-no-single" name="featured">
                            <option label="blank"></option>
                            <option value="1">Yes</option>
                            <option value="0">No</option>
                        </select>
                        @if($errors->has('featured'))
                        <span class="help-block text-danger">{{ $errors->first('featured') }}</span>
                        @endif
                    </div>

                </div>
                <!-- Row / End -->


                <!-- Row -->
                <div class="row with-forms">

                    <!-- Price -->
                    <div class="col-md-4">
                        <h5>Price <i class="tip" data-tip-content="Type overall or monthly price if property is for rent"></i></h5>
                        <div class="select-input disabled-first-option">
                            <input type="text" data-unit="NGN" name="price" value="{{ $listing->username }}">
                        </div>
                        @if($errors->has('price'))
                        <span class="help-block text-danger">{{ $errors->first('price') }}</span>
                        @endif
                    </div>

                    <!-- Area -->
                    <div class="col-md-4">
                        <h5>Area</h5>
                        <div class="select-input disabled-first-option">
                            <input type="text" data-unit="Sq Ft" name="area" value="{{ $listing->username }}">
                        </div>
                        @if($errors->has('area'))
                        <span class="help-block text-danger">{{ $errors->first('area') }}</span>
                        @endif
                    </div>

                    <!-- Rooms -->
                    <div class="col-md-4">
                        <h5>Rooms</h5>
                        <select class="chosen-select-no-single" name="rooms">
                            <option label="blank"></option>
                            <option>1</option>
                            <option>2</option>
                            <option>3</option>
                            <option>4</option>
                            <option>5</option>
                            <option>More than 5</option>
                        </select>
                        @if($errors->has('rooms'))
                        <span class="help-block text-danger">{{ $errors->first('rooms') }}</span>
                        @endif
                    </div>

                </div>
                <!-- Row / End -->

            </div>
            <!-- Section / End -->


            <!-- Section -->
            <h3>Gallery</h3>
            <div class="submit-section">
                <label for="title">Upload Images</label>
                <input type="file" name="images[]" multiple>
                @if($errors->has('images'))
                <span class="help-block text-danger">{{ $errors->first('images') }}</span>
                @endif
            </div>
            <!-- Section / End -->


            <!-- Section -->
            <h3>Location</h3>
            <div class="submit-section">

                <!-- Row -->
                <div class="row with-forms">

                    <!-- Address -->
                    <div class="col-md-6">
                        <h5>Address</h5>
                        <input type="text" name="address" value="{{ $listing->username }}">
                        @if($errors->has('address'))
                        <span class="help-block text-danger">{{ $errors->first('address') }}</span>
                        @endif
                    </div>

                    <!-- City -->
                    <div class="col-md-6">
                        <h5>City</h5>
                        <input type="text" name="city" value="{{ $listing->city }}">
                        @if($errors->has('city'))
                        <span class="help-block text-danger">{{ $errors->first('city') }}</span>
                        @endif
                    </div>

                    <!-- City -->
                    <div class="col-md-6">
                        <h5>State</h5>
                        <input type="text" name="state" value="{{ $listing->state }}">
                        @if($errors->has('state'))
                        <span class="help-block text-danger">{{ $errors->first('state') }}</span>
                        @endif
                    </div>

                    <!-- Zip-Code -->
                    <div class="col-md-6">
                        <h5>Zip-Code</h5>
                        <input type="text" name="zip_code" value="{{ $listing->zip_code }}">
                        @if($errors->has('zip_code'))
                        <span class="help-block text-danger">{{ $errors->first('zip_code') }}</span>
                        @endif
                    </div>

                </div>
                <!-- Row / End -->

            </div>
            <!-- Section / End -->


            <!-- Section -->
            <h3>Detailed Information</h3>
            <div class="submit-section">

                <!-- Description -->
                <div class="form">
                    <h5>Description</h5>
                    <textarea class="WYSIWYG" name="description" cols="40" rows="3" id="summary" spellcheck="true" value="{{ $listing->description }}"></textarea>
                    @if($errors->has('description'))
                    <span class="help-block text-danger">{{ $errors->first('description') }}</span>
                    @endif
                </div>

                <!-- Row -->
                <div class="row with-forms">

                    <!-- Balconies -->
                    <div class="col-md-4">
                        <h5>Balcony <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="balcony">
                            <option label="blank"></option>
                            <option>Yes</option>
                            <option>No</option>
                        </select>
                        @if($errors->has('balcony'))
                        <span class="help-block text-danger">{{ $errors->first('balcony') }}</span>
                        @endif
                    </div>

                    <!-- Beds -->
                    <div class="col-md-4">
                        <h5>Bedrooms <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="bedrooms">
                            <option label="blank"></option>
                            <option value="-">None</option>
                            <option>1</option>
                            <option>2</option>
                            <option>3</option>
                            <option>4</option>
                            <option>5</option>
                        </select>
                        @if($errors->has('bedrooms'))
                        <span class="help-block text-danger">{{ $errors->first('bedrooms') }}</span>
                        @endif
                    </div>

                    <!-- Baths -->
                    <div class="col-md-4">
                        <h5>Bathrooms<span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="bathrooms">
                            <option label="blank"></option>
                            <option value="-">None</option>
                            <option>1</option>
                            <option>2</option>
                            <option>3</option>
                            <option>4</option>
                            <option>5</option>
                        </select>
                        @if($errors->has('bathrooms'))
                        <span class="help-block text-danger">{{ $errors->first('bathrooms') }}</span>
                        @endif
                    </div>



                    <!-- Kitchen -->
                    <div class="col-md-4">
                        <h5>Kitchen <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="kitchen">
                            <option label="blank"></option>
                            <option>Yes</option>
                            <option>No</option>
                        </select>
                        @if($errors->has('kitchen'))
                        <span class="help-block text-danger">{{ $errors->first('kitchen') }}</span>
                        @endif
                    </div>

                    <div class="col-md-4">
                        <h5>Parking Space <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="parking_space">
                            <option label="blank"></option>
                            <option>Yes</option>
                            <option>No</option>
                        </select>
                        @if($errors->has('parking_space'))
                        <span class="help-block text-danger">{{ $errors->first('parking_space') }}</span>
                        @endif
                    </div>
                    <!-- Baths -->
                    <div class="col-md-4">
                        <h5>Bathroom Type <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="bathroom_type[]">
                            @foreach($bathroom_types )
                            <option label="blank"></option>
                            <option>Ensuite</option>
                            <option>Shared</option>
                        </select>
                        @if($errors->has('bathroom_type'))
                        <span class="help-block text-danger">{{ $errors->first('bathroom_type') }}</span>
                        @endif
                    </div>

                </div>


                <!-- Row / End -->
                <!-- Row -->
                <div class="row with-forms">
                    <div class="col-md-4">
                        <h5>Toilet <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="toilet">
                            <option label="blank"></option>
                            <option value="-">None</option>
                            <option>1</option>
                            <option>2</option>
                            <option>3</option>
                            <option>4</option>
                            <option>5</option>
                        </select>
                        @if($errors->has('toilet'))
                        <span class="help-block text-danger">{{ $errors->first('toilet') }}</span>
                        @endif
                    </div>
                    <div class="col-md-4">
                        <h5>Water Supply <span>(optional)</span></h5>

                        <select class="chosen-select-no-single" name="water_supply">
                            <option label="blank"></option>
                            <option>Yes</option>
                            <option>No</option>
                        </select>
                        @if($errors->has('water_supply'))
                        <span class="help-block text-danger">{{ $errors->first('water_supply') }}</span>
                        @endif
                    </div>
                    <div class="col-md-4">
                        <h5>Power Supply <span>(optional)</span></h5>
                        <select class="chosen-select-no-single" name="power_supply">
                            <option label="blank"></option>
                            <option>Yes</option>
                            <option>No</option>
                        </select>
                        @if($errors->has('power_supply'))
                        <span class="help-block text-danger">{{ $errors->first('power_supply') }}</span>
                        @endif
                    </div>

                </div>
            </div>
            <!-- Section / End -->



            <div class="divider"></div>
            <button class="button preview margin-top-5">Edit Property <i class="fa fa-arrow-circle-right"></i></button>
            </div>
            <br>
        </form>
    </div>

</div>
</div>

@endsection

I tried using this method but was confronted with this error SQLSTATE[23000]: Integrity constraint violation: 1048 Column ‘balcony’ cannot be null. I don’t want the user to be required to fill everything just new data that is needed to be added. Please how can I displayed existing data on the select box and file input?. is there a better way to do this?

Advertisement

Answer

<!-- Balconies -->
                <div class="col-md-4">
                    <h5>Balcony <span>(optional)</span></h5>
                    <select class="chosen-select-no-single" name="balcony">
                        <option label="blank"></option>
                        <option>Yes</option>
                        <option>No</option>
                    </select>
                    @if($errors->has('balcony'))
                    <span class="help-block text-danger">{{ $errors->first('balcony') }}</span>
                    @endif
                </div>

as you can see in the balcony section code, you don’t have value attribute on your options element so it should be like that

<!-- Balconies -->
                <div class="col-md-4">
                    <h5>Balcony <span>(optional)</span></h5>
                    <select class="chosen-select-no-single" name="balcony">
                        <option label="blank"></option>
                        <option value='yes' >Yes</option>
                        <option value='no'>No</option>
                    </select>
                    @if($errors->has('balcony'))
                    <span class="help-block text-danger">{{ $errors->first('balcony') }}</span>
                    @endif
                </div>

Besides that you can change the default value to Nullable of the column fields which are not required fields through phpmyadmin or through migrations and refresh the migrations again like:

public function up()
{
    Schema::create('listings', function (Blueprint $blueprint) {

        $blueprint->string('balcony')->nullable();
    });
}
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement