laravel中scope的用法以及技巧


laravel中scope的用法以及技巧?

laravel中的scope作用域

laravel中在模板中处理(属于不属于)的数据(增删改查),引入了scope来处理

也就是在模板定义方法中,加上前缀scope。

简言之,Laravel中模型中可以定义scope开头方法,这类方法可以通过模型直接调用。这类方法也称作查询作用域。

where('votes', '>', 100);
    }

    /**
     * Scope a query to only include active users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }
}

laravel中要求在定义的方法scope后面跟的字母要大写(小驼峰命名法)

后面那我们去控制器进行处理数据
在控制器中使用:去除scope前缀,首字母变小写调用就好啦.

定义范围后,可以在查询模型时调用范围方法。但是,scope调用方法时不应包含前缀。您甚至可以将调用链接到各种范围,例如:

$users = App\User::popular()->active()->orderBy('created_at')->get();

通过or查询运算符组合多个Eloquent模型范围可能需要使用Closure回调:

$users = App\User::popular()->orWhere(function (Builder $query) {
    $query->active();
})->get();

但是,由于这可能很麻烦,Laravel提供了一种“更高阶” orWhere方法,允许您在不使用闭包的情况下流畅地将这些范围链接在一起:

$users = App\User::popular()->orWhere->active()->get();

关于方法中的参数 $query ,查看Api文档了解是 scope 定义的方法有俩个参数,一个是 Builder、一个是 Model。

在 Post 模型方法前加上一个 scope 前缀,作用域总是返回 查询构建器。在调用 scope 作用域的方法时,通过返回的构建器来拼接成完整的查询条件。

原文地址


文章作者: WXiangQian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WXiangQian !
 上一篇
laravel实现Model的setAttribute、getAttribute、scopeQuery方法 laravel实现Model的setAttribute、getAttribute、scopeQuery方法
首先要定义一个Model1.getAttribute的实现请getFooAttribute在模型上创建一个方法,其中Foo包含您要访问的列的“studly”外壳名称。在这个例子中,我们将为first_name属性定义一个访问器。尝试检索se
2019-09-20
下一篇 
利用PHP实现钉钉webhook通知 利用PHP实现钉钉webhook通知
利用PHP实现钉钉webhook通知,方便随时获取项目的动态 如果你嫌麻烦不想写这么多代码的话你可以直接引入包:https://github.com/WXiangQian/laravel-DingTalk 以上包满足所有需求,无需再看下文。
2019-09-16
  目录