//将所有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 ...
网友评论