在Laravel 5.1中,是否有一种方便的方法来检查一个Eloquent模型对象是否已经被软删除?我不是在谈论选择数据,而是在拥有对象之后,例如Thing::withTrashed()->find($id)
到目前为止,我唯一能想到的方法是:
if ($thing->deleted_at !== null) { ... }
我没有看到任何相关的方法在API中,例如允许
if ($thing->isDeleted()) { ... }
在Laravel 5.1中,是否有一种方便的方法来检查一个Eloquent模型对象是否已经被软删除?我不是在谈论选择数据,而是在拥有对象之后,例如Thing::withTrashed()->find($id)
到目前为止,我唯一能想到的方法是:
if ($thing->deleted_at !== null) { ... }
我没有看到任何相关的方法在API中,例如允许
if ($thing->isDeleted()) { ... }
刚刚意识到我在查错的API错误了。Model类中没有这个功能,但是我的模型使用的SoftDelete trait有一个trashed()
方法。
因此我可以写成:
if ($thing->trashed()) { ... }
if( method_exists($thing, 'trashed') ) {
// do something
}
在使用资源响应时,检查Eloquent模型是否使用软删除:
if( method_exists($this->resource, 'trashed') ) {
// do something
}
if ($thing->trashed()) {
// do something
}
希望这能对您有所帮助!
对于那些在Laravel测试用例中寻求有关测试环境的答案的人,您可以进行如下断言:
$this->assertSoftDeleted($user);
或者在它被彻底删除时(没有软删除)
$this->assertDeleted($user);
这是最好的方法
$model = 'App\\Models\\ModelName';
$uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));
if($usesSoftDeletes) {
// write code...
}
这对我有用
$checkDomain = Domain::where('tenant_id', $subdomain)->withTrashed()->first();
if($checkDomain->trashed()){
return redirect()->route('domain.not.found');
}else{
return view('frontend.' . theme() . '.index');
}
if ($thing == null)
。 - Zachary WeixelbaumwithTrashed()
来获取项目?否则,你将无法获取任何已删除的记录。 - DisgruntledGoat