TP版本5.1,请看清并确认版本号是5.1不是5.0
这个是5.1 的手册地址。
https://www.kancloud.cn/manual/thinkphp5_1/353946
案例一:
需要生成查询SQL: id = 1 and batch_id = 2
Db::name('box')->where(['id'=>1,'batch_id'=>2])->buildSql(true);
生成SQL: SELECT * FROM `box` WHERE `id` = 1 AND `batch_id` = 2 【正确】
案例二:
需要生成SQL:batch_id = 2 and id between 1 and 5
Db::name('box')->where(['id'=>['between',"1,5"],'batch_id'=>2])->buildSql(true);
生成SQL: SELECT * FROM `box` WHERE `id` IN (between,1,5) AND `batch_id` = 2 【错误】
此时的SQL已经和我们需要的有出入了。
看ThinkPHP 5.1的手册:
where('字段名','表达式','查询条件');
whereOr('字段名','表达式','查询条件');
Db::name('box')->where(['batch_id'=>2])->where('id','between',[1,5])->buildSql(true);
生成SQL:SELECT * FROM `box` WHERE `generate_id` = 2 AND `id` BETWEEN 1 AND 5 【正确】
结论:使用5.1以后,之前的连贯操作不管用了,现在要写多个Where。原来的操作习惯是根据IF条件来组合一个Array,然后where一次就行了。现在怎么办?
$dbObj = Db::name('box')->where($map);
if($a == 1){ //此条件根据实际情况,此处仅为测试
$dbObj->where('id','between',[$startID,$endID]);
}
$res = $dbObj->buildSql(true);
感觉这样操作想来比较麻烦。没有之前的方便。
当前如果你打开TP5.1中的\thinkphp\library\think\Query.php 文件,你会发现除了where方法还如:
whereOr, whereXOr,whereBetween,whereBetweenTime,whereExists,whereExp等很多方法。