我是 Laravel 的新手,我正在嘗試通過表單更新設保人的詳細資訊,但是資料庫表中的記錄沒有記錄任何更改。我已經嘗試了許多不同的解決方案,但不幸的是我還沒有成功 - 我覺得問題可能涉及控制器中的更新方法未達到,因為當我在更新方法中放置回傳/重定向陳述句時似乎被忽略了。edit 方法似乎可以正常作業,但是 update 方法不會改變資料庫記錄。為了清楚起見,我將包含我現有代碼的片段。任何有關此問題的幫助將不勝感激!
授予者控制器檔案
public function update(GrantorRequest $request, $id)
{
$grantor = Grantor::findOrFail($id);
$request->validate([
'grantor_name' => 'required'
]);
$updateDetails = [
'grantor_name' => $request->get('grantor_name')
];
$grantor->update($updateDetails);
return redirect()->route('grantors.index');
}
注意“grantor_name”是資料庫行中一個欄位的示例,還有多個其他欄位也需要更新。
Grantors.edit.blade 檔案
<div class="flex-1 px-10">
<form method="PUT" action="{{ route('grantors.update', $grantor->id) }}" hljs-string">">
@method('PATCH')
@csrf
<div hljs-string">">
@if ($errors->any()) <span>{{ $errors }}</span> @endif
</div>
<div hljs-number">96">
<!-- item -->
<div x-data=" {isOpen : false} " hljs-number">2 pb-4 border-b border-divider">
<div @click="isOpen = !isOpen"
hljs-string">"
:hljs-string">'font-bold' : isOpen}">
<span hljs-string">">Grantor Details</span>
<img hljs-number">1 duration-300 ml-4 inset-0 h-6 w-6" :hljs-string">'transform rotate-180' : isOpen}"
src="../../img/icon-arrow-down.png" alt="使用 Laravel 從表單更新資料庫記錄">
</div>
<div x-show.transition.duration.300ms.origin.bottom="isOpen" x-cloak @click.away="isOpen = false"
hljs-number">3 text-sm text-neutral">
@if($is_editable)
<div hljs-string">">
<button type="button" hljs-keyword">default btn-edit js-edit"><img hljs-number">1 duration-300 ml-4 inset-0 h-6 w-6" src="../../img/edit-icon.svg" alt="使用 Laravel 從表單更新資料庫記錄"></button>
<button type="button" hljs-keyword">default btn-save js-save"><img hljs-number">1 duration-300 ml-4 inset-0 h-6 w-6" src="../../img/save-icon.svg" alt="使用 Laravel 從表單更新資料庫記錄"></button>
</div>
@endif
<form hljs-string">">
<div hljs-number">6 ml-6">
<div hljs-number">1/7">
<label for="grantor_name" hljs-number">1 md:mb-0 pr-4 " for="inline-full-name" disabled>Grantor/ Company/ Organisation Name *
</label>
</div>
<div hljs-number">1/6">
<input hljs-number">200 appearance-none border-2 border-gray-200 rounded w-full py-2 px-4 text-gray-700 leading-tight focus:outline-none focus:bg-white focus:border-green-900 is-disabled @error('grantor_name') is-invalid @enderror" name="grantor_name" value="{{ old('grantor_name') ?? $grantor->grantor_name }}" id="grantor_name" type="text" disabled >
</div>
</div>
租戶路由檔案
Route::get('/grantors/{id}/edit', [App\Http\Controllers\GrantorController::class, 'edit'])->name('grantors.edit');
Route::put('/grantors', [App\Http\Controllers\GrantorController::class, 'update'])->name('grantors.update');
授予者模型
protected $fillable= [
'grantor_name'
]);
請注意,$fillable 中包含許多其他欄位,出于長度的目的,我沒有包含這些欄位。
uj5u.com熱心網友回復:
因為您實際上并沒有更新模型。您需要呼叫update您的模型:
public function update(GrantorRequest $request, $id)
{
// Dont do `toArray` . You'll lose the Eloquent model.
$grantor = Grantor::findOrFail($id);
$request->validate([
'grantor_name' => 'required'
]);
$updateDetails = [
'grantor_name' => $request->get('grantor_name')
];
// Notice the call below
$grantor->update($updateDetails);
return redirect()->route('grantors.index');
}
路由定義也應該改變:
// `id` param was missing
Route::patch('/grantors/{id}', [App\Http\Controllers\GrantorController::class, 'update'])->name('grantors.update');
而且html表單不支持patchorput方法。你應該這樣做:
<form method="POST" action="{{ route('grantors.update', $grantor->id) }}" class="is-readonly">
@method('PATCH')
...
uj5u.com熱心網友回復:
- 更改您的
Grantors.edit.blade.php檔案:
<div class="flex-1 px-10">
<form method="POST" action="{{ route('grantors.update', ['id' => $grantor->id]) }}" hljs-string">">
@method('PUT')
@csrf
// ...
注意變化:
1a)method="PUT"到method="POST"
1b)@method('PATCH')到@method('PUT')
1c){{ route('grantors.update', $grantor->id) }}到{{ route('grantors.update', ['id' => $grantor->id]) }}
``
- 更改租戶路由檔案
// ...
Route::put('/grantors/{id}', [App\Http\Controllers\GrantorController::class, 'update'])->name('grantors.update');
// ...
2a) 將/{id}路段包含在路線中。
- 確保您
<form>的Grantors.edit.blade.php檔案中有一個標簽。
從外觀上看,您有 2 個<form>標簽。一個嵌套在另一個內部。
<form method="PUT" action="{{ route('grantors.update', $grantor->id) }}" >
和
<form >
- 如果之前快取過,則清除路由快取。
在您的終端中,運行以下命令:
php artisan cache:clear
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407031.html
標籤:
