You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Doctrine DBAL QueryBuilder复制列时如何取反布尔列值

解决方案

Doctrine DBAL的QueryBuilder中,set()方法第二个参数默认会被当做预绑定参数处理,直接传SQL片段字符串的话,会被转义成普通字面量,根本不会执行字段运算,要实现布尔取反直接用表达式构建器的not()方法就行:

$qb->update('table')
    ->set('col_1', $qb->expr()->not('col_2'));

生成的原生SQL就是UPDATE table SET col_1 = NOT col_2,不管是原生布尔类型,还是你用tinyint存的0/1布尔值,都能正确取反:col_2是1就给col_1赋0,col_2是0就赋1。

顺便提一句,你之前写的$qb->update('table')->set('col_1', 'col_2');其实是不规范的,只是部分版本/驱动下刚好没触发参数绑定才跑通,规范的同列值复制应该显式声明传入的是列名,避免意外bug:

$qb->update('table')
    ->set('col_1', $qb->expr()->column('col_2'));

内容的提问来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:36:25