请您解释一下以下行为?
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');
}
有人可以解释一下吗?
答案 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();
});
这是否是有效的方法是另一个问题。但这有效。