Laravel模型函数最好的疙瘩

Laravel model function best prickets

我是 Laravel 的新人,我有如下问题 我在类别模型查询中检查类别是否存在 如下

 public function scopeIsExist($query ,$id)
    {
        return $query->where(['deleted' => 1, 'id' => $id])->orderBy('id', 'DESC')->first();
    }

我的控制器是

    public function edit($id)
    {


        $dataView['category'] = Category::IsExist($id);    

        if(!$dataView['category'])
        {
            return view('layouts.error');
        }else{
            $dataView['title'] = 'name';
            $dataView['allCategories'] = Category::Allcategories()->get();
            return  view('dashboard.category.edit')->with($dataView);
        }

    }

我的问题是当我使用方法 isEXIST 时,如果没有找到它,它不会重定向到错误页面,但是我删除了 ISEXIST 并将其替换为如下

$dataView['category'] = Category::where(['deleted' => 1, 'id' => $id])->orderBy('id', 'DESC')->first();

效果很好。 谁能帮帮我

那是因为本地范围应该 return \Illuminate\Database\Eloquent\Builder 的一个实例。您应该删除作用域中的 first() 并将其放入控制器中。
像这样重新定义范围:

public function scopeIsExist($query ,$id)
    {
        return $query->where(['deleted' => 1, 'id' => $id])->orderBy('id', 'DESC');
    } 

在您的控制器编辑方法中:

    $dataView['category'] = Category::IsExist($id)->first();    

您可以查看本地范围的文档 https://laravel.com/docs/8.x/eloquent#local-scopes