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

t1rydlwq  于 2023-03-28  发布在  PHP
关注(0)|答案(5)|浏览(99)

在Laravel 5.1中,有没有一种好的方法来检查一个有说服力的模型对象是否被软删除?我不是在谈论选择数据,而是一旦我有了对象,例如Thing::withTrashed()->find($id)
目前为止我能想到的唯一办法就是

if ($thing->deleted_at !== null) { ... }

我没有看到任何相关的方法in the API,例如

if ($thing->isDeleted()) { ... }
kknvjkwl

kknvjkwl1#

刚刚意识到我在错误的API中寻找。Model类没有这个,但是我的模型使用的SoftDelete trait有一个trashed()方法。
这样我就能写作了

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

nfzehxib2#

在laravel 6中,你可以使用以下命令。
要检查Eloquent模型是否使用软删除,请执行以下操作:

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

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

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

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

if ($thing->trashed()) {
    // do something
}

希望这会有帮助!

2nbm6dog

2nbm6dog3#

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

$this->assertSoftDeleted($user);

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

$this->assertDeleted($user);
gudnpqoy

gudnpqoy4#

这是最好的办法

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

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

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

t3irkdon5#

这对我很有效

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

相关问题