Laravel 如何在blade中显示软删除的行?

Laravel 如何在blade中显示软删除的行?,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我已经创建了一个轮询系统,在后端(CMS区域),我希望管理员能够删除轮询。管理员删除投票时,应软删除投票。这是预期的工作,但我也希望有管理员能够恢复投票的能力。为此,我在管理区域显示所有投票(包括软删除的投票) PollController index()以获取所有轮询 $polls = Poll::withTrashed()->get(); 在blade中,我希望每个轮询有两个不同的按钮。一个用于还原,一个用于删除,但我只想根据是否可以还原或删除,为每个轮询显示一个按钮 为了做到这一点

我已经创建了一个轮询系统,在后端(CMS区域),我希望管理员能够删除轮询。管理员删除投票时,应软删除投票。这是预期的工作,但我也希望有管理员能够恢复投票的能力。为此,我在管理区域显示所有投票(包括软删除的投票)

PollController index()以获取所有轮询

$polls = Poll::withTrashed()->get();
在blade中,我希望每个轮询有两个不同的按钮。一个用于还原,一个用于删除,但我只想根据是否可以还原或删除,为每个轮询显示一个按钮

为了做到这一点,我把这个放在了刀刃上的foreach中:

@if($poll->trashed())
// Restore button
@else
// Delete button
@endif
然而,问题是,trashed()在我的3次调查中只有1次被软删除时,所有调查都会返回true。我不确定为什么trashed()返回的都是真的

如何使此方法正常工作?谢谢。第一部分 这取决于您的查询。使用软删除时,Laravel将查询默认情况下未软删除的所有模型。当您还希望获取软删除的模型时,需要在查询中调用withTrashed()方法。请在此处阅读更多信息:

要了解
withTrashed()
的作用,您需要了解软删除是如何工作的。软删除模型的工作原理是向数据库表中添加一个名为deleted_at的新列。它的值默认为空。当软删除模型时,Laravel会将当前时间戳放入该列。因此,此字段不再包含空值

使用
软删除
查询模型时,Laravel会在查询中附加一个deleted_at is null条件。调用withTrashed()方法将从查询中删除该条件

查看默认查询修饰符和withTrashed方法的源代码

第二部分 这些都是事件。您可以调用它来告诉Laravel,当这个事件发生时,它应该执行那个特定的闭包。在您的示例中,它正在侦听“deleting”事件。更多信息请参见此处:

第三部分 您可以使用
forceDelete()
方法完全
delete soft deletable
模型。请参见此处的“永久删除模型”:

例如

$items=App\Model::withTrashed()->get()

如果要还原单个项目,只需按ID查找即可:


$item=App\Model::find($id)

表中
处的列
deleted\u不为空时,
trashed()
将返回true的唯一原因是,这意味着记录是软删除的。您的民意测验表中的这列为空吗?@thefallen您是对的,这就解决了它。非软删除的行已在列处被删除\u设置为0:00:00,但设置为null修复了此问题。谢谢