I try to make web using laravel 9, when I tried to edit the data, it not showing any error and redirect it to dashboard without show and error and didn't pass the data to db. here is my code for controller
public function edit($id)
{
// find bidan_id that login
$pasien_id = Auth::guard('pasien')->id();
$pasien = IbuHamil::where('id', $pasien_id)->findOrFail($id);
return view('pasien.data.edit', compact('pasien_id', 'pasien'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, IbuHamil $pasien)
{
// validate request
$request->validate([
'name' => 'required|string',
'nama_suami' => 'string|nullable',
'alamat' => 'string|nullable',
]);
$pasien->update([
'name' => $request->name,
'nama_suami' => $request->nama_suami,
'alamat' => $request->alamat,
]);
return redirect()->route('pasien.dashboard');
}
and here is my edit.blade.php form. I already tried change the method between put and patch
<form action="{{ route('data.update', $pasien->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('put')
<div class="col-md-6">
<div class="form-group mb-3">
<label for="">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ $pasien->name }}" placeholder="Nama Lengkap" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-3">
<label for="">Nama Suami</label>
<input type="text" class="form-control @error('nama_suami') is-invalid @enderror" name="nama_suami" value="{{ $pasien->nama_suami }}" placeholder="Nama Suami">
@error('nama_suami')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-12">
<div class="form-group mb-3">
<label for="">Alamat</label>
<input type="text" class="form-control @error('alamat') is-invalid @enderror" name="alamat" value="{{ $pasien->alamat }}" placeholder="Alamat Lengkap">
@error('alamat')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
</div>
<button class="btn btn-primary" type="sumbit">Simpan</button>
</form>
and here is my route
Route::group(['middleware' => ['pasien']], function() {
// route dashboard
Route::get('/dashboard', App\Http\Controllers\Pasien\DashboardController::class)->name('pasien.dashboard');
Route::resource('/data', \App\Http\Controllers\Pasien\DataController::class);
});
and here is my route:list
GET|HEAD pasien/data ......................data.index › Pasien\DataController@index
POST pasien/data ......................data.store › Pasien\DataController@store
GET|HEAD pasien/data/create ...............data.create › Pasien\DataController@create
GET|HEAD pasien/data/{data} ...............show › Pasien\DataController@show
PUT|PATCH pasien/data/{data} ...............data.update › Pasien\DataController@update
DELETE pasien/data/{data} ...............data.destroy › Pasien\DataController@destroy
GET|HEAD pasien/data/{data}/edit ..........data.edit › Pasien\DataController@edit
thank you
According to your route :
Route::resource('/data',\App\Http\Controllers\Pasien\DataController::class);
If you check your routes php artisan route:list
you should see routes like pasien/data/{data}
You are using $pasien in your controller's update method. Changing it to $data will work.
Just make sure you use the parameter same as mentioned in Resource route.