如何在laravel 5.4中使用软删除检查模型

如何在laravel 5.4中使用软删除检查模型,laravel,model,Laravel,Model,我是一个模特儿,所有模特儿都可以使用 有些型号使用softDelete,但有些型号不使用 如何通过检查模型是否在处包含列deleted\u来检查模型是否具有软删除功能 这是我要检查的代码 $isSoftDeleted = \Schema::hasColumn($model->getTable(), 'deleted_at'); 这是一种很好的方法吗?你可以使用class\u使用递归(static::class)例如 $uses = class_uses_recursive(static:

我是一个模特儿,所有模特儿都可以使用

有些型号使用softDelete,但有些型号不使用

如何通过检查模型是否在处包含列
deleted\u来检查模型是否具有软删除功能

这是我要检查的代码

$isSoftDeleted = \Schema::hasColumn($model->getTable(), 'deleted_at');

这是一种很好的方法吗?

你可以使用
class\u使用递归(static::class)
例如

$uses = class_uses_recursive(static::class);
return in_array(SoftDeletes::class, $uses);
检查列只能表明它存在,而不是您实际使用的是trait

请注意,
class\u uses\u recursive
是一个使用内置
class\u使用的Laravel辅助函数,但也可以升入父类。

另一种检查方法(稍微原始一点)是检查方法
forceDelete
是否存在

方法1-检查
forceDelete
方法是否存在

if(method_exists($model, 'forceDelete')){
    // Do your stuff here
}
同样,这是一个小技巧

方法2-使用接口

通常情况下,使用
inSACEOF
检查模型是否使用特征不是最佳选择,从技术上讲,创建接口
usesoftdeletes
并使实际使用
SoftDeletes
特征的模型实现它更合适。这样做,您只需使用
instanceof
操作符进行检查

例如:

interface UsesSoftDeletes{
    //
}
然后在你的模型中

class User extends Model implements UsesSoftDeletes
{

    use SoftDeletes;

}
那就去查查

if($model instanceof UsesSoftDeletes){
    // Do your stuff here
}
编辑-检查全局范围

您还可以检查模型是否使用
SoftDeletingScope
类(Laravel 5.x)


以下答案可以帮助您:
$model->hasGlobalScope('illumb\Database\elount\SoftDeletingScope')
为我工作,谢谢
if($model->hasGlobalScope('Illuminate\Database\Eloquent\SoftDeletingScope')){
 // Do your stuff
}