二十六、ThinkPHP6_模型的查询范围

本文介绍了如何在模型中创建封装的查询方法,便于控制器调用。通过scope前缀定义查询范围,如筛选男性用户并限制返回条数,以及接受参数的查询方法。此外,还展示了如何链式调用多个查询方法,以及设置全局查询范围。这些技巧能有效提升代码的可读性和复用性。
摘要由CSDN通过智能技术生成
  1. 在模型端创建一个封装的查询或写入方法,方便控制器调用。比如,封装一个筛选所有性别为男的查询,只显示5条部分字段。方法名规范:前缀 scope,后缀随意,调用时直接把后缀作参考组使用;查询范围只能使用find() 和 select() 方法
//模型中
//查询范围,男,5条
public function scopeMale($query)
{
	$query->where('gender','男')
		  ->field('id,name,gender,email')
		  ->limit(5);
}

//控制器中
public function scope()
{
	$result = UserModel::scope('male')->select();
	//或
	$result = UserModel::male()->select();
}
  1. 查询封装可以传递参数
//模型中
public function scopeEmail($query,$value)
{
	$query->where('email','like','%'.$value.'%');
}

//控制器中
$result = UserModel::scope('email','xiao')->select();
//或
$result = UserModel::email('xiao')->select();
  1. 多个查询方法连缀调用,比如找出邮箱xiao 并大于80分的
public function scopePrice($query,$value)
{
	$query->where('price','>',$value);
}
public function scopeEmail($query,$value)
{
	$query->where('email','like','%'.$value.'%');
}

//控制器
$result = UserModle::scope('email','xiao')->scope('price','90')->select();
$result = UserModel::email('xiao')->price(90)->select();
  1. 全局范围查询,在此模型下不管怎么查询都会加全局条件
//模型中
//定义全局的查询范围
protected $globalscope =['status'];
//全局范围
public function scopeStatus($query)
{
	$query->where('status',1);
}

//控制器中
//定义了全局查询,如果想取消这个查询:
UserModel::withoutGlobalScope();
//定义了全局查询,如果想取消部分查询
UserModel::withoutGlobalScope(['status']);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值