如何在laravel 5.4中使用软删除检查模型
我是一个模特儿,所有模特儿都可以使用 有些型号使用softDelete,但有些型号不使用 如何通过检查模型是否在处包含列如何在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:
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
}