laravel DB union 后实现排序,分页

2021-08-20  本文已影响0人  码农工号9527
//将所有query union组合起来
$final_union = $query1->union($query2)->union($query3)......

//->toSql()方法获取到的 sql 语句是是类似这样的结果 :select * from `tb_user` where `id` = ?
// 想要得到具体的语句,可以利用 builder 的 getBindings 方法:
$bindings = $final_union->getBindings();
$sql = str_replace('?', "'%s'", $final_union->toSql());
$sql = sprintf($sql, ...$bindings);

$final = DB::table(DB::raw("({$sql}) as {$tb_name}"));

if($orders) foreach ($orders as $order) $final->orderBy($order['column'], $order['sort']);

$re = $final->paginate($page_num);

其中,str_replace是将?替换成sql中绑定的参数,"'%s'"是因为替换后的参数值将不会有引号括起来,当搜索的是字符串类型的值时会出现类似这样的sql条件语句段:... where name = 小野猪 and ...,这种执行会报错:ERROR 1054 (42S22): Unknown column '小野猪' in 'where clause',因此需要再里面再加入单引号处理成类似这样的条件sql:... where name = '小野猪' and ...

上一篇下一篇

猜你喜欢

热点阅读