如何检查 Eloquent 中的行是否被软删除?
How to check if row is soft-deleted in Eloquent?
在 Laravel 5.1 中是否有检查 eloquent 模型对象是否已被软删除的好方法?我不是在谈论选择数据,而是一旦我有了对象,例如Thing::withTrashed()->find($id)
到目前为止我能看到的唯一方法是
if ($thing->deleted_at !== null) { ... }
我没有看到任何相关方法 in the API 允许例如
if ($thing->isDeleted()) { ... }
刚刚意识到我看错了API。模型 class 没有这个,但是我的模型使用的 SoftDelete trait 有一个 trashed()
方法。
所以我可以写
if ($thing->trashed()) { ... }
在laravel6中,您可以使用以下内容。
要检查 Eloquent 模型是否正在使用软删除:
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);
这对我有用
$checkDomain = Domain::where('tenant_id', $subdomain)->withTrashed()->first();
if($checkDomain->trashed()){
return redirect()->route('domain.not.found');
}else{
return view('frontend.' . theme() . '.index');
}
这是最好的方法
$model = 'App\Models\ModelName';
$uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));
if($usesSoftDeletes) {
// write code...
}
在 Laravel 5.1 中是否有检查 eloquent 模型对象是否已被软删除的好方法?我不是在谈论选择数据,而是一旦我有了对象,例如Thing::withTrashed()->find($id)
到目前为止我能看到的唯一方法是
if ($thing->deleted_at !== null) { ... }
我没有看到任何相关方法 in the API 允许例如
if ($thing->isDeleted()) { ... }
刚刚意识到我看错了API。模型 class 没有这个,但是我的模型使用的 SoftDelete trait 有一个 trashed()
方法。
所以我可以写
if ($thing->trashed()) { ... }
在laravel6中,您可以使用以下内容。
要检查 Eloquent 模型是否正在使用软删除:
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);
这对我有用
$checkDomain = Domain::where('tenant_id', $subdomain)->withTrashed()->first();
if($checkDomain->trashed()){
return redirect()->route('domain.not.found');
}else{
return view('frontend.' . theme() . '.index');
}
这是最好的方法
$model = 'App\Models\ModelName';
$uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));
if($usesSoftDeletes) {
// write code...
}