版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34804120/article/details/86251314
Laravel中模型中可以定义scope开头方法,这类方法可以通过模型直接调用。
这类方法也称作查询作用域
参考文档:https://laravel-china.org/docs/laravel/5.6/eloquent
例如, 你可能经常需要获取「受欢迎的」用户。要定义这样一个范围,只需要在对应的 Eloquent 模型方法前加入 scope 前缀。scope方法总是返回一个查询构造器实例。
1.定义scope方法
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 只查询受欢迎的用户.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
/**
* 只查询 active 的用户.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
2.调用scope方法:
在方法调用时你不需要添加 scope 前缀
$users = App\User::popular()->active()->orderBy('created_at')->get();
有时,你可能希望定义一个可接受参数的范围。
这时只需给你的范围添加额外的参数即可。
范围参数应该定义在 $query 参数后。
public function scopeOfType($query, $type)
{
return $query->where('type', $type);
}
注意事项:
- 方法定义必须以scope开头。后面第一个字母大写。 后面括号中第一个必须是Builder,第二个参数可以根据需要定义。
- 方法返回值也必须是Builder