Laravel Local Scope 作用域

无道 2019-07-22 0 条评论 教程相关 阅读158 手机阅读

前言

在项目中 经常会面对一些条件的查询,这些查询条件好些是相同的。scope可以实现这些相同条件的复用。

例如

某个需求是按category_id为条件作为筛选。

那么我们就可以在模型中定义scopeCategoryId方法。

public function scopeCategoryId($query, $category_id = '')
{
    if ($category_id != '') {
        return $query->where('category_id', $category_id);
    } else {
        return $query;
    }
}

再例如

在某个请求中我们需要按照关键字筛选,并且,URL中有字段key才去数据库查询和key有关的。没有的话就不查询。

那么一般情况下,如果用if来写,就要判断有key该sql语句加上where条件,没key就不加。

显然不如以下写法方便:

public function scopeKeyword($query, $kw = '')
{
    if ($kw != '') {
        return $query->where('title','like', '%' . $kw . '%');
    } else {
        return $query;
    }
}

如下图:

Laravel local scope 作用域

使用

$snippets = Snippet::OrderBy('id', 'desc')->CategoryId($category_id)->Keyword($kw)->paginate(15);

看到了吗?

我们加入:CategoryIdKeyword方法即可。

所以就要引入我们下面要说的写法。

写法

1、命名方式

scope+自定义的方法名

2、传参

  • 第一个参数是查询生成器
  • 如果传入参数 那么可以生成动态的效果。如上面的:scopeCategoryId($query, $category_id = '')

3、返回值

无论内部你怎么写,最终都要返回查询构造器

全文完 [
有帮助?打赏
支付宝打赏
微信打赏
]
标签: laravel scope 作用域
修改: 2019-07-22 15:19
这篇文章还没有评论呢~
点击刷新/生成验证码
It's me
昵称:无道
坐标:成都
性别:
一个人,一介学生,一个儿子~ 愿你我都被世界温暖以待
迷思爱 公众号

新建了个公众号,会不定期分享一些小玩意,有提升效率的办公软件、有一些黑科技的软件、或教程等等。

爷~,要不关注下~~