Home > Back-end >  Problem with Laravel CRUD (Edit Function)
Problem with Laravel CRUD (Edit Function)

Time:01-05

Good day everyone. I'm quite new to new to Laravel and was doing some basic CRUD coding, I was able to code the add and view function, but I'm having a hard time with the edit and delete function. I have 4 files, the master blade file, the web.php (routing), the blade file and the Form Controller.

This is the promo.blade.php file:

<table  id="table1" >
                            <thead>
                                <tr>
                                    <th >ACTION</th>
                                    <th >Offer ID</th>
                                    <th >Promo Name</th>
                                    <th >Promo Price</th>
                                    <th >Status</th>
                                </tr>    
                            </thead>
                            <tbody>
                                @foreach ($data as $key => $item)
                                    <tr>
                                    <td >
                                        <a href="#" data-bs-toggle="modal" data-bs-target="#show" data-myofferid="{{$item->offerId}}" data-mytitle="{{$item->promoName}}" data-myprice="{{$item->promoPrice}}">
                                            <span ><i ></i></span>
                                        </a> 
                                        
                                        <a href="#" data-bs-toggle="modal" data-bs-target="#edit" data-mainid="{{$item->id}}"  data-myofferid="{{$item->offerId}}" data-mytitle="{{$item->promoName}}" data-myprice="{{$item->promoPrice}}">
                                            <span ><i ></i></span>
                                        </a>  

                                        <a href="#" data-bs-toggle="modal" data-bs-target="#delete" data-myofferid="{{$item->offerId}}" data-mytitle="{{$item->promoName}}" data-myprice="{{$item->promoPrice}}">
                                            <span ><i ></i></span>
                                        </a>  
                                    </td>
                                        <td >{{ $item->offerId }}</td>
                                        <td >{{ $item->promoName }}</td>
                                        <td >{{ $item->promoPrice}}</td>
                                        <td >{{ $item->isActive }}</td>
                                    </tr>
                                @endforeach
                            </tbody>
                        </table>
<!--Start Modal Edit -->
<div  id="edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel160" aria-hidden="true">
    <div  role="document">
        <div >
            <div >
                <h5  id="add">
                    Edit Promo
                </h5>

                <button type="button"  data-bs-dismiss="modal" aria-label="Close">
                    <i data-feather="x"></i>
                </button>
            </div>
                <div >

                    <form action="{{ route('promo.edit') }}" method="POST">
                        @csrf
                        
                        <div >
                            <label for="">ID</label>
                            <input type="text"  name="id" id="id" value="">
                            <span style="color:red">@error('id'){{$message}} @enderror</span>
                        </div>        
                        
                        <div >
                            <label for="">Offer ID</label>
                            <input type="text"  name="offerId" id="offerId" value="">
                            <span style="color:red">@error('offerId'){{$message}} @enderror</span>
                        </div>        
                        
                        <div >
                            <label for="">Promo Name</label>
                            <input type="text"  name="promoName" id="promoName" value="">
                            <span style="color:red">@error('promoName'){{$message}} @enderror</span>
                        </div>        

                        <div >
                            <label for="">Promo Price</label>
                            <input type="number"  name="promoPrice" id="promoPrice" value="">
                            <span style="color:red">@error('promoPrice'){{$message}} @enderror</span>
                        </div>                                           
                </div>
                        
                <div >
                    <button type="button"  data-bs-dismiss="modal">
                        <i ></i>
                            <span >CANCEL</span>
                    </button>
                    <button type="submit" >
                        <i ></i>
                            <span >SAVE</span>
                    </button>
                </div>
                    </form> 
            </div>
        </div>
    </div>
</div>
<!-- End Modal Edit-->

Then this is the web.php file, for the routing:

Route::get('promo.promo', [App\Http\Controllers\FormControllerPromo::class, 'viewRecord'])->middleware('auth')->name('promo.promo');
Route::post('promo.add', [App\Http\Controllers\FormControllerPromo::class, 'addPromo'])->name('promo.add');
Route::post('promo.delete/{id}', [App\Http\Controllers\FormControllerPromo::class, 'viewDelete'])->middleware('auth');

Route::get('promo.edit', [App\Http\Controllers\FormControllerPromo::class, 'viewRecord'])->middleware('auth')->name('promo.edit');
Route::get('promo.edit/{id}', [App\Http\Controllers\FormControllerPromo::class, 'viewDetail'])->middleware('auth');
Route::post('promo.edit', [App\Http\Controllers\FormControllerPromo::class, 'edit'])->name('promo.edit');

This is the master.blade.php file:

<!--Start Modal edit for Promo-->
    <script type="text/javascript">
        $('#edit').on('show.bs.modal', function (event){

            var button = $(event.relatedTarget)
            var mainid = button.data('mainid')
            var id = button.data('myofferid')
            var title = button.data('mytitle')
            var price = button.data('myprice')

            var modal = $(this)
            modal.find('.modal-body #id').val(mainid);
            modal.find('.modal-body #offerId').val(id);
            modal.find('.modal-body #promoName').val(title);
            modal.find('.modal-body #promoPrice').val(price);
        })
    </script>
<!--End Modal edit for Promo-->

I think this is the part where the code wont execute properly. This is the FormControllerPromo.php file:

// view form
    public function index()
    {
        return view('promo.promo');
    }

    // view record
    public function viewRecord()
    {
        $data = DB::table('promo')->get();
        return view('promo.promo',compact('data'));
    }

    // view detail
    public function viewDetail($id)
    {
        $data = DB::table('promo')->where('id',$id)->get();
        return view('promo.promo',compact('data')); 
    }

    // edit promo
    public function edit(Request $request){
        $id = $request->input('id');
        $offerId = $request->input('offerId');
        $promoName = $request->input('promoName');
        $promoPrice = $request->input('promoPrice');

        DB::table('promo')
        ->where('id', $id)  // find your user by their email
        ->limit(1)  // optional - to ensure only one record is updated.
        ->update(array('offerId' => $offerId, 'promoName' => $promoName, 'promoPrice' => $promoPrice));  // update the record in the DB. 

        $data = DB::table('promo');
        return view('promo.promo',compact('data'));
    }

I've been trying to code this for almost a week now with no success, any help is highly appreciated. :)

CodePudding user response:

the update seems right, should work. but when you pass the $data variable to your view, you should call ->get(), because otherwise you return a query builder instance, that later raises the Undefined property error when trying to access {{$item->offerId}}.

change second last line in your example

//from this:
$data = DB::table('promo');

//to this:
$data = DB::table('promo')->get();

//or to this if you want to show only one record:
$data = DB::table('promo')->where('id', $id)->get();
  •  Tags:  
  • Related