TP5.1组合多项查询如何组装?

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等很多方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值