【问题标题】:How to check if row is soft-deleted in Eloquent?如何检查 Eloquent 中的行是否被软删除?
【发布时间】:2015-11-30 16:27:56
【问题描述】:

在 Laravel 5.1 中是否有一种很好的方法来检查一个 eloquent 模型对象是否已被软删除?我不是在谈论选择数据,但是一旦我有了对象,例如Thing::withTrashed()->find($id)

到目前为止,我能看到的唯一方法是

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

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

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

【问题讨论】:

    标签: php laravel eloquent laravel-5.1 soft-delete


    【解决方案1】:

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

    所以我可以写

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

    【讨论】:

    • 也许 5.2 有所不同,但我试过了,但没有用。相反,当我尝试将 $thing 软删除时,Laravel 返回 null,所以我只检查了 if ($thing == null)
    • @ZacharyWeixelbaum 您是否使用withTrashed() 来获取项目,正如我在问题中提到的那样?否则你不会得到任何已删除的记录。
    【解决方案2】:

    在 laravel6 中,您可以使用以下内容。

    检查 Eloquent 模型是否使用软删除:

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

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

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

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

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

    希望,这会有所帮助!

    【讨论】:

      【解决方案3】:

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

      $this->assertSoftDeleted($user);
      

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

      $this->assertDeleted($user);
      

      【讨论】:

        【解决方案4】:

        这是最好的方法

        $model = 'App\\Models\\ModelName';
        
        $uses_soft_delete = in_array('Illuminate\Database\Eloquent\SoftDeletes', class_uses($model));
        
        if($usesSoftDeletes) {
            // write code...
        }
        

        【讨论】:

          【解决方案5】:

          这对我有用

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 1970-01-01
            • 2019-04-02
            • 2021-07-22
            • 1970-01-01
            • 2011-12-10
            • 1970-01-01
            相关资源
            最近更新 更多