错误:forceDelete方法不存在

时间:2017-10-29 18:29:06

标签: laravel-5.3 laravel-5.4

请您解释一下以下行为?

public function kill($id)
   {
       $post = Post::withTrashed()->where('id',$id)->get();
       $post->forceDelete();
       return redirect()->back()->with('success','Post Deleted Succesfully');

   } 

代码会导致此错误:

forceDelete method doesnt exist

但以下代码没有。

public function kill($id)
   {
       $post = Post::withTrashed()->where('id',$id)->first();
       $post->forceDelete();
       return redirect()->back()->with('success','Post Deleted Succesfully');
   } 

有人可以解释一下吗?

3 个答案:

答案 0 :(得分:0)

我的Laravel知识生疏了,我是Rails的家伙。如果需要任何改进,我只是登陆你的帖子进行审查。

任何方式......如果我是正确的......

你有两个功能,分别是F1和F2。

在F1中,您正在搜索具有特定ID的帖子。你得到的是一个集合代理而不是text-align。因此,它不会回复p { display: inline-block; } .center { text-align: center; } .right { text-align: right; }

在F2中,您要求集合中的第一个对象,因此您将获得一个响应<div class="container"> <p class="center">Center</p> <p class="right">Right</p> </div>的{​​{1}}对象。

要删除集合,您可以使用Post功能代替

等内容
forceDelete()

答案 1 :(得分:0)

实际上它非常简单。正如你在帖子中指出的那样,

$post = Post::withTrashed()->where('id',$id)->get(); $post->forceDelete();

给出错误

$post = Post::withTrashed()->where('id',$id)->first(); $post->forceDelete();

不列入。我理解的原因是,$ id始终是唯一的。它返回与post表中的特定id相关的单个数据(或单个模型)。在您使用get()方法的第一种情况下,您尝试返回的是多行数据,因此它将以多维数组格式返回单个数据。您可以使用dd()辅助函数检查它。 在第二种情况下,您使用的是first()方法,它总是返回与该特定$ id相关的单行数据,因此对于该情况存在forceDelete()方法(在其他意义上,您可以说forceDelete仅存在单行数据你想要使用get()来检索多个数据行模型,而不是多个数据行模型。记住get()总是尝试返回多个数据,而多个数据只能保存在数组中,所以它给出数组作为结果,尽管结果只有一个。)

希望这有帮助。

答案 2 :(得分:0)

这是因为当您使用-> get()时,您真正拥有的是Laravel集合,并且集合上没有forceDelete()方法。 因此,您必须使用-> first()或-> find(),雄辩地将返回模型,然后可以在其上使用forceDelete。

例如:

$users->each(function ($user) {
       $user->forcedelete();
    });

这是否是有效的方法是另一个问题。但这有效。