Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

sofija21's avatar

Missing required parameter for [Route: apartments.delete] [URI: user/apartments/{apartment}] [Missing parameter: apartment].

Hi, guys! In my laravel application I have users, admins and clients user roles. Admins and users can both delete apartments. For the users this functionality is working, but for the Admins - not. I suppose, that the issue is in the situation, that I have defined the same route name for Users and Admins. But I am not sure how to fix it properly. Could you please help to solve this?

web.php:

Route::group(['prefix'=>'admin', 'middleware'=>['isAdmin','auth','PreventBackHistory']], function(){
        Route::get('addapartment',[AdminController::class,'addapartment'])->name('admin.addapartment');
        Route::get('addhouse',[AdminController::class,'addhouse'])->name('admin.addhouse');
        Route::post('addapartment',[ApartmentController::class,'addbyadmin'])->name('admin.addapartment');
        Route::post('addhouse',[HouseController::class,'addbyadmin'])->name('admin.addhouse');
        Route::get('apartments',[AdminController::class,'apartments'])->name('admin.apartments');
        Route::get('houses',[AdminController::class,'houses'])->name('admin.houses');
        Route::delete('apartments/{apartment}',[ApartmentController::class,'deletebyadmin'])->name('apartments.delete');
        Route::delete('houses/{house}',[HouseController::class,'deletebyadmin'])->name('houses.delete');
        Route::get('profile',[AdminController::class,'profile'])->name('admin.profile');
});

Route::group(['prefix'=>'user', 'middleware'=>['isUser','auth','PreventBackHistory']], function(){
    Route::get('addapartment',[UserController::class,'addapartment'])->name('user.addapartment');
    Route::get('addhouse',[UserController::class,'addhouse'])->name('user.addhouse');
    Route::post('addapartment',[ApartmentController::class,'addData'])->name('user.addapartment');
    Route::post('addhouse',[HouseController::class,'addData'])->name('user.addhouse');
    Route::get('apartments',[UserController::class,'apartments'])->name('user.apartments');
    Route::get('houses',[UserController::class,'houses'])->name('user.houses');
    Route::delete('apartments/{apartment}',[ApartmentController::class,'delete'])->name('apartments.delete');
    Route::delete('houses/{house}',[HouseController::class,'delete'])->name('houses.delete');
    Route::get('profile',[UserController::class,'profile'])->name('user.profile');

});

ApartmentController:

public function delete(Apartment $apartment)
  {

  $apartment->delete();
  $apartments = Apartment::all();
  $houses = House::all();
  $users = User::all();

  return view('dashboards.users.apartments', compact('apartments', 'houses', 'users'));
  }
public function deletebyadmin(Apartment $apartment)
  {

  $apartment->delete();
  $apartments = Apartment::all();

  return view('dashboards.admins.apartments', compact('apartments'));
  }

AdminController:

function apartments(){
    $apartments = Apartment::all();
    $users = User::all();
    return view('dashboards.admins.apartments', compact('apartments', 'users'));
  }

apartments.blade for admins:

<form method="POST" action="{{route('apartments.delete', $apartment->apartment_id)}}">
      @method('delete')
      @csrf
      <button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>

apartments.blade file for users:

 <form method="POST" action="{{route('apartments.delete', $apartment->apartment_id)}}">
      @method('delete')
      @csrf
      <button type="submit" class="btn btn-danger btn-sm">Delete</button>
   </form>

Thank you in advance!

0 likes
5 replies
Nakov's avatar

Is it an apartment_id within the apartments table? Shouldn't it be just id

 <form method="POST" action="{{route('apartments.delete', $apartment->id)}}">

you can pass just the instance

 <form method="POST" action="{{route('apartments.delete', $apartment)}}">

unless it is null it will work.

1 like
sofija21's avatar

@Nakov in my table "apartments" there is a column apartment_id , not just id. But thank you for trying!

sofija21's avatar

@Nakov Thank you! Actually, you were right, the issue was caused by some records in this table, which had apartment_id = NULL. I have deleted them and it works now.

Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

Just use the same route to delete for all of them. Deletion shouldn't be user specific. You can use authorization to check if each type of user is allowed

Anyways. If you want to have duplicate routes like this, you cannot have duplicate names. Prefix each name with its type

Route::delete('houses/{house}',[HouseController::class,'deletebyadmin'])->name('admin.houses.delete')
1 like

Please or to participate in this conversation.