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

时间:2015-11-30 16:27:57

标签: php laravel eloquent laravel-5.1 soft-delete

在Laravel 5.1中,有一种很好的方法来检查一个雄辩的模型对象是否被软删除了吗?我不是在谈论选择数据,而是一旦我拥有了对象,例如/manchester/cakephp-developers-dance-to-beyonce

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

Thing::withTrashed()->find($id)

我没有看到任何允许例如

的相关方法in the API
if ($thing->deleted_at !== null) { ... }

5 个答案:

答案 0 :(得分:53)

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

所以我可以写

if ($thing->trashed()) { ... }

答案 1 :(得分:5)

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

要检查雄辩模型是否正在使用软删除:

trackByFn(index) {
return index;`enter code here`

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

if( method_exists($thing, 'trashed') ) {
    // do something
}

最后检查模型是否被破坏:

if( method_exists($this->resource, 'trashed') ) {
    // do something
}

希望,这会有所帮助!

答案 2 :(得分:0)

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

$this->assertSoftDeleted($user);

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

$this->assertDeleted($user);

答案 3 :(得分:0)

这对我有用

$checkDomain = Domain::where('tenant_id', $subdomain)->withTrashed()->first();
                
 if($checkDomain->trashed()){
       return redirect()->route('domain.not.found');
 }else{
     return view('frontend.' . theme() . '.index');
 }

答案 4 :(得分:0)

这是最好的方法

$model = 'App\\Models\\ModelName';

$uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));

if($usesSoftDeletes) {
    // write code...
}