我正在尝试通过点击按钮
来删除某个类别刀片:
<td class="center"><a href="{{URL::to('/deletecat/'.$category->name) }}"><span class="glyphicon glyphicon-trash"></span></a></td>
路线:
Route::get('/deletecat/{name}','CategoryController@delete');
控制器:
public function delete($name)
{
category::find($name)->delete();
return Redirect::route('managecategory');
}
但点击
按钮时出错Call to a member function delete() on a non-object
任何帮助表示感谢。
答案 0 :(得分:7)
::find($id)
方法希望$id
为数字,即您要查找的行的主键。
如果要按名称删除行,则应使用以下代码:
category::where('name', $name)->delete();
答案 1 :(得分:0)
该错误显然是因为返回的 NON-OBJECT。
<块引用>::find($name) 返回一个空对象或 null
这是因为搜索为空。
确保名称是主键,以便使用查找。
否则:
<块引用>使用 ::where('name', $name)->delete();
或:
<块引用>::where('name','=', $name)->delete();
*我指出 =
是因为如果您需要搜索不同于 =
的内容,请使用 >=
<>
等等...
其次,使用destroy
并不是很重要。推荐但不是必须的!
答案 2 :(得分:-1)
在您看来: 它必须是一个提交 POST 请求的表单,如下所示:
<form action="/deletecat/{{$data->id}}" method="post">
@csrf
@method('DELETE')
<input type="submit" value="delete " >
</form>
因为这是 POST 请求必须使用 csrf 和删除操作。
在您的路线中,它使用了 delete() 方法,然后是控制器。
Route::delete('/deletecat/{name}', 'CategoryController@destory');
在控制器中:
public function destory($name)
{
category::find($name)->delete();
return Redirect::route('managecategory');
}