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 作用域的方法时,通过返回的构建器来拼接成完整的查询条件。