如果子表> 0,Laravel防止删除

时间:2019-04-24 17:57:55

标签: php laravel laravel-5.8

我使用Laravel 5.8,并且遇到这种情况。我要防止删除类别(如果其中包含产品)。这就是我到目前为止

Category.php

  public function products(){
    return $this->hasMany('App\Product');
  }

  protected static function boot() {
    parent::boot();

    static::deleting(function($category) {
         if ($category->products()->count() > 0) {
            return false;
        }
    });

  }

CategoriesController.php

    public function destroy($id) {
      $category = Category::findOrFail($id);
      $delete_status = $category->delete();

      if($delete_status == 1) {
        return redirect()->route('categories.index')->with('success','Deleted Sucesfully');
      } else {
        return redirect()->route('categories.index')->with('error','Cant delete bacause it has products in it');
      }
    }

到目前为止,它仍然有效,但是我觉得它有点粗略。如果类别没有任何产品,则$ delete_status变量将返回1,但是如果类别中包含产品,则该变量将不返回任何内容,这就是为什么我使用if / else而不是if / elseif的原因。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

因为您只使用一次退货。这个。意思是当进入if里面的删除函数然后返回任何东西时,否则什么也没有。也许您必须以其他方式声明返回任何内容。