php - 在控制器上的字符串上调用成员函数 fill()
问题描述
我正在尝试获取 eloquent 的 ID 以编辑其列,但是当我在编辑页面中的列中进行更改并单击完成时,它会返回此错误。调用字符串上的成员函数 fill()
当我使用代码dd($id);
时,它在 dd 页面上返回了“更新”一词。
路线
Route::group(['prefix' => 'admin/books'], function($book){
Route::get('edit/{id}','BookController@getUrlBook')->middleware('auth');
Route::post('edit/{book}','EditController@update')->middleware('auth');
Route::get('edit/{id}','BookController@getUrlBook', function ($book) {
return view('edit',[
'id' => $book->id,
'name' => $book->name,
'writer' => $book->writer_name,
'isbn' => $book->isbn,
]);
})->middleware('auth');
Route::post('create','EditController@create');
Route::get('create', function () {
return view('create');
})->middleware('auth');
});
控制器
public function update(Request $request,$id){
$this->middleware('auth');
$imgExtensions = ['jpg','png','svg'];
$id->fill($request->only(['name','writer_name','isbn']));
if(null !== $request->book_image && in_array($request->file('book_image')->getClientOriginalExtension(), $imgExtensions )){
$id->image = $request->file('book_image')->storeAs('images', $request->id.'.jpg');
}
$id->save();
return redirect('/admin');
}
解决方案
如果我理解正确:
您从方法参数中获得的 $id 是您要更新的书的 id ...所以,您应该对书本模型使用 (fill) 方法而不是它的 id ...
public function update(Request $request,$id){
$this->middleware('auth');
$imgExtensions = ['jpg','png','svg'];
$book=Book::findOrFail($id);
$book->fill($request->only(['name','writer_name','isbn']));
if(null !== $request->book_image && in_array($request->file('book_image')->getClientOriginalExtension(), $imgExtensions )){
$id->image = $request->file('book_image')->storeAs('images', $request->id.'.jpg');
}
$id->save();
return redirect('/admin');
}
另一个解决方案是使用 laravel 绑定:
Route::post('edit/{book}','EditController@update')->middleware('auth');
public function update(Request $request,Book $book) ....
现在 laravel 将为您从 db 获取 $book,并且您使用该路由的方式与之前使用它的方式相同
推荐阅读
- javascript - 为什么 `return()` 和 `onsubmit()` 在 html 中创建登录表单以欢迎页面时不起作用
- wordpress - 在 WP Bakery /Wordpress 上显示
- c# - 如何使用 C# 中的宏从 Revit 中的链接中获取元素?
- r - R Plot_ly:如何更改颜色条调色板和颜色阈值?
- django - 无法导入“django.db”pylint(导入错误)
- reactjs - Nginx、Docker 和 Docker 组合
- linux - linux内核中的低级IO
- netlogo - 如何将txt文件中的每一行存储到netlogo中的新列表中?
- c# - 如何使用 c# 找到 GCD 和 LCM?
- c# - 在访问成员之前检查对象是否为空,或者分配非空替代