查询构造器 union all 之后参数绑定乱序, 是否是bug?

开发环境win10,php8,laravel8.5

我把两个表union all之后,在条件中会用到detail=9999字段进行判断(这里写死9999是为了方便排查,为说明问题sql已简化)

$bills = $contractBill->unionAll($customBill);;

$billsInfo =  DB::table(DB::raw("({$bills->toSql()}) as t"))
    ->selectRaw('id')
    ->mergeBindings($bills->getQuery())
    ->where('detail', '9999')
    ->paginate(5);;

但是按照这个写法,9999这个值的绑定顺序会乱,以下是打印出来的sql

查询构造器 union all 之后参数绑定乱序, 是否是bug?
这样的结果是:参数绑定错误,导致查询数据错误,最后我用拼接原生sql解决

$bills = $contractBill->unionAll($customBill);;

$billsInfo =  DB::table(DB::raw("({$bills->toSql()}) as t"))
    ->selectRaw('id')
    ->mergeBindings($bills->getQuery())
    ->whereRaw('is_detail = 9999')
    ->paginate(5);

我想知道的是,这个现象是属于构造器bug吗,不是的话有其他办法能够解决这个参数绑定乱序的问题吗?求解答,感谢!

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

是不是 BUG 不知道,但是可以解决!

->mergeBindings($c->getQuery())
// 换成
->addBinding($c->getBindings())

file

file

file

Laravel

3年前 评论
asdfghj (楼主) 3年前
Proton 2年前

是不是 BUG 不知道,但是可以解决!

->mergeBindings($c->getQuery())
// 换成
->addBinding($c->getBindings())

file

file

file

Laravel

3年前 评论
asdfghj (楼主) 3年前
Proton 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!