![](/img/trans.png)
[英]Update() function in the Laravel Resource Controller is not working
[英]Update not working in Resource Controller for Laravel 8
以前,我嘗試了幾個小時來讓我的“destroy()”函數正常工作。 這對你們大多數人來說聽起來很荒謬,但只需將“方法(“DELETE”)”放在表單中就可以了,我仍然不知道為什么。
現在,我堅持使用 update() 函數。 一旦我點擊更新,頁面就會重新加載並且什么都不做。 它不會更新數據庫中的信息,也不會將我重定向回索引。 這是代碼:
路線(web.php):
Route::resource('books', BookController::class);
表格(Edit.blade.php) :
@section('content')
<div class="row">
<div class="col-lg-12">
<form action="{{ route('books.update', $book->id) }}" method="POST">
@csrf
@method('PUT')
<div class="mb-3 mt-3">
<label for="exampleFormControlInput1" class="form-label">Book Title</label>
<input type="text" name="title" class="form-control" value="{{ $book->title }}">
</div>
<div class="mb-3">
<label for="exampleFormControlTextarea1" class="form-label">Book Author</label>
<input type="text" name="author" class="form-control" value="{{ $book->author }}" placeholder="Author Name..">
</div>
<div class="btn-group" role="group">
<button type="submit" class="btn btn-block btn-danger">Update</button>
<a href="{{ route('books.index') }}"><button type="button" class="btn btn-success">Go Back</button></a>
</div>
</form>
</div>
</div>
@endsection
控制器(BookController) :
public function update(Request $request, Book $book)
{
$validated = $request->validate([
'title' => 'required|max:255|unique:books',
'author' => 'required|max:255'
]);
Book::where('id',$book->id)->update($validated);
return redirect()->route('books.index')->with('message','Book Updated!');
}
我在這里做錯了什么? 一些幫助將不勝感激。
我認為問題在於您的獨特驗證。 當您不更改表單中的標題並點擊更新時,唯一驗證將失敗。 它失敗了,因為標題已經存在於數據庫中。 我們必須跳過對正在更新的資源的唯一驗證。
$validated = $request->validate([
'title' => 'required|max:255|unique:books,title,'.$book->id, // <-- change this
'author' => 'required|max:255'
]);
$book->update( $request->only(['title', 'author']) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.