thinkphp6.0学习笔记之数据库的高级查询

这篇博客详细介绍了ThinkPHP6.0框架中关于数据库的高级查询方法,包括使用| (or) 和 & (and) 组合条件,关联数组多字段查询,条件字符串的复杂组装,闭包查询,以及whereRaw方法进行自定义SQL片段和参数绑定等。通过这些技巧,可以方便地处理复杂的查询需求。

一、高级查询

1、使用 | (or)或&(and)来实现where条件的高级查询,where支持多个连缀

$user = Db::table('students') ->where('username|email', 'like', '%xiao%') 
							  ->where('price&uid', '>', 0) 
							  ->select();
//生成的 SQL 
SELECT * FROM `students` WHERE ( `username` LIKE '%xiao%' OR `email` LIKE '%xiao%' ) AND ( `price` > 0 AND `uid` > 0 )

2、关联数组方式,可以再where进行多个字段进行查询

$user = Db::table('students')->where
	([
 		['id', '>', 0], 
 		['status', '=', 1], 
 		['price', '>=', 80], 
 		['email', 'like', '%163%'] 
 	])
 						->select();
 //生成的 SQL 
 SELECT * FROM `students` WHERE `id` > 0 AND `status` = 1 AND `price` >= 80 AND `email` LIKE '%163%'

3、条件字符串复杂组装,如果使用了exp,就使用raw方法

$user = Db::table('students')->where([
 		['status', '=', 1], 
 		['price', 'exp', Db::raw('>80')] 
 		])
 		->select();
 //生成的 SQL 
 SELECT * FROM `students` WHERE `status` = 1 AND ( `price` >80 )

4、 如果有多个 where,并且 where 条件是分离的map,而map,而mapmap 本身有多个条件;
5.、那么map条件如果需要先执行出结果,再和后续条件判断,也就是加上括号;6.、那么,需要对这个map 条件如果需要先执行出结果,再和后续条件判断,也就是加上括号; 6.、那么,需要对这个map6.map 变量,再加上一个中括号处理优先级

$map = [ ['status', '=', 1],
			['price', 'exp', Db::raw('>80')]
		]; 
$user = Db::table('students') ->where([$map]) ->where('status', '=', '%163.com%')->select();
//生成的 SQL 
SELECT * FROM `students` WHERE ( `status` = 1 AND ( `price` >80 ) ) AND `status` = %163.com

7、如果,条件中有多次出现一个字段,并且需要 OR 来左右筛选,可以用 whereOr

$map1 = [ ['username', 'like', '%小%'], 
		  ['email', 'like', '%163%'] 
		]; 
$map2 = [ ['username', 'like', '%孙%'], 
		  ['email', 'like', '%.com%'] 
		]; 
$user = Db::table('students') ->whereOr([$map1, $map2])->select();
//生成的 SQL 
SELECT * FROM `students` WHERE ( `username` LIKE '%小%' AND `email` LIKE '%163%' ) OR ( `username` LIKE '%孙%' AND `email` LIKE '%.com%' )

8、闭包查询可以连缀,会自动加上括号,更清晰,如果是 OR,请用 whereOR()

$user = Db::table('students')->where(function ($query) { 
				  $query->where('id', '>', 10); 
		 })
	 ->whereOr(function ($query) { 
				 $query->where('username', 'like', '%小%'); 
		})
		->select();
//sql语句
SELECT * FROM `students` WHERE ( `id` > 1 ) OR ( `uname` LIKE '%xiao%' )

9、对于比较复杂或你不知道如何拼装 SQL 条件,那么就直接使用 whereRaw()即可

$user = Db::table('students')->whereRaw('(username LIKE "%小%" AND email LIKE "%163%") OR (price > 80)') 
							 ->select();

10、 whereRaw()方式也支持参数绑定操作,具体如下

$user = Db::table('students')->whereRaw('(username LIKE :username AND email LIKE :email) 
										OR (price > :price)', 
								['username'=>'%小%', 'email'=>'%163%', 'price'=>80]) 
							 ->select();
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值