php根据id查找条件怎么写_Thinkphp6中where条件中字段与字段比较条件的写法

今天进行系统测试的时候突然发现原来写好的效果不正常了,仔细排查了所有代码都没有明显的错误,开始以为代码逻辑有问题,但无论如何排查都不能找到问题所在,于是用终极武器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` )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值