如何在Eloquent中检查行是否被软删除?

Dis*_*oat 34 php soft-delete laravel eloquent laravel-5.1

在Laravel 5.1中有一种很好的方法来检查一个雄辩的模型对象是否被软删除了吗?我不是在谈论选择数据,而是一旦我拥有了对象,例如Thing::withTrashed()->find($id)

到目前为止,我能看到的唯一方法是

if ($thing->deleted_at !== null) { ... }
Run Code Online (Sandbox Code Playgroud)

我没有在API中看到任何允许的相关方法

if ($thing->isDeleted()) { ... }
Run Code Online (Sandbox Code Playgroud)

Dis*_*oat 59

刚刚意识到我在寻找错误的API.Model类没有这个,但我的模型使用的SoftDelete特性有一个trashed()方法.

所以我可以写

if ($thing->trashed()) { ... }
Run Code Online (Sandbox Code Playgroud)


tan*_*993 7

在 laravel6 中,您可以使用以下内容。

要检查 Eloquent 模型是否使用软删除:

if( method_exists($thing, 'trashed') ) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

要检查 Eloquent 模型是否在资源中使用软删除(使用资源响应时):

if( method_exists($this->resource, 'trashed') ) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

最后检查模型是否被丢弃:

if ($thing->trashed()) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

希望,这会有所帮助!


Eri*_*dal 6

对于那些寻求测试环境答案的人,在 laravel 的测试用例中,您可以断言:

$this->assertSoftDeleted($user);
Run Code Online (Sandbox Code Playgroud)

或者如果它刚刚被删除(没有软删除)

$this->assertDeleted($user);
Run Code Online (Sandbox Code Playgroud)