美文网首页
laravel DB union 后实现排序,分页

laravel DB union 后实现排序,分页

作者: 码农工号9527 | 来源:发表于2021-08-20 12:01 被阅读0次
    //将所有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 ...

    相关文章

      网友评论

          本文标题:laravel DB union 后实现排序,分页

          本文链接:https://www.haomeiwen.com/subject/cthtiltx.html