PLZ不要为我的下一句话投下赞成票,和我在一起...
我想知道从模型中删除对象的最佳实践方法吗? 我已经看到了几个类似的问题,但是没有人涉及到整个主题,也没有人介绍我的具体情况。
我想创建一个删除按钮,以删除laravel中的特定对象。我知道该怎么做,但是我担心事情太复杂了。
假设我有一个名为Post的模型
我也有控制器PostController。当我制作此控制器时,便获得了资源。因此,我准备了几种方法。摧毁
/**
* Remove the specified resource from storage.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
//
}
对于为什么会给我类型提示 Post 和$ post参数,我有些困惑。对我来说,如果将$ id作为参数,那将是有意义的。
但是一次又一次,我不是Tay-Tay。因此,每次我觉得没有意义时,我都会想念一些东西。因此,冒着泛滥的风险,我如何制作一个使用预定义销毁方法的删除按钮?正在寻找这三个步骤的答案:
再次为之广泛而感到抱歉,但我感到很多有关此问题的问题都是为了具体化而提出的,但由于缺乏知识,问题被缩小了很多,因此可能会遗漏明显的答案。
答案 0 :(得分:1)
他们这样做是为了更加明智。
喜欢跟上Object Oriented
不要担心。即使它具有destroy(Post $post)
,您也不必为此Post
函数提供destroy()
对象。您只需通过id
传递帖子的request
。其余的由Laravel处理。
Laravel在发布表中查找具有您在请求中传递的ID的发布,然后获取该发布对象并将其提供给destroy()
函数。
您只需要在其上拨打delete()
。
public function destroy(Post $post)
{
// laravel has found the post for you.
$post->delete();
}
让我们看看您的方法。
您可以将其更改为destroy($id)
public function destroy($id)
{
// you have to find the particular post from database to delete.
Post::where('id', $id)->delete();
}
看,它更复杂。
表格
<form method="post" action="{{ route('post.destroy'), 1 }}">
<!-- here the '1' is the id of the post which you want to delete -->
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit">Delete</button>
</form>
路线
Route::resource('post', 'PostController');
控制器
public function destroy(Post $post)
{
$post->delete();
}
答案 1 :(得分:1)
来自Laravel官方文档:
由于我们已将所有{user}参数绑定到App \ User模型,因此 用户实例将被注入到路由中。因此,例如 对profile / 1的请求将从数据库注入User实例 其ID为1。
如果在数据库中找不到匹配的模型实例,则显示404 HTTP 响应将自动生成。
答案 2 :(得分:-1)
在您的destroy方法中再传递一个参数id
公共函数destroy($ id,Post $ post){
$ post = $ post-> findOrFail($ id);
if(!$ post-> delete()){
return Redirect::back()->withErrors($post->errors());
}
Flash ::成功(自己:: DELETE_MESSAGE); return Redirect :: back();
}