今天进行系统测试的时候突然发现原来写好的效果不正常了,仔细排查了所有代码都没有明显的错误,开始以为代码逻辑有问题,但无论如何排查都不能找到问题所在,于是用终极武器var_dump()一段一段的分区调试了,果不然异常情况找到了,下面是我写的一行代码:
$repaied = Db::name('card_bill')->where('id',$cid)->where('card_bill_money','>','card_reply_money')->find();//判断账单是否还完
这段代码是作用是查找card_bill表中的card_bill_money是否大写card_reply_money,但是这段代码打印出来的语句是:
SELECT * FROM `viooma_card_bill` WHERE id='1' AND `card_bill_money` > 'card_reply_money' LIMIT 1
ThinkPHP解析出来的时候把原来的字段card_reply_money解析成了字符串了,大家仔细看 > 后面的card_reply_money使用了单引号而非`符号,这才明白ThinkPHP将第二个字段解析成字符串了,所以查询ThinkPHP文档,说实在我确实没找到,也不知道是不是搜索条件不正确,于是百度了下,看到有文章讲如果在thinkphp进行字段与字段间比较的话,写法有点区别,一试果然如此,既然我遇到了这个问题,我相信肯定也有好多小伙伴会碰到过这种问题,于是按我搜索的关键词写了这篇文章,希望遇此类问题的朋友们能快速找到并解决你的问题。
下面给大家两个解决方法:
一、正确的写法如下:
$repaied = Db::name('card_bill')->where('id',$cid)->where('card_bill_money',' > card_reply_money')->find();//判断账单是否还完
大家注意看下两段代码where条件分别是:
where('card_bill_money','>','card_reply_money') //这里字段与字段之间用 > 隔开,表示>后面的是字段值而非字段
where('card_bill_money',' > card_reply_money') //这里把 > 与后面的字段写在了一起,即字段与字段之间的比较
二、使用关键词whereColumn(此方法在ThinkPHP6的用户手册中找到)
查询update_time大于create_time的用户数据
Db::table('think_user')
->whereColumn('update_time','>','create_time')
->select();
生成的SQL语句如下:
SELECT * FROM `think_user` WHERE ( `update_time` > `create_time` )