Laravel UNION联合查询并分页

UNION联合查询并分页

$xk =  DB::table('xiaokes')->select(['id','xk_name as name','xk_teacher_id as tid','ke_type','created_at']) 
           ->where('xk_teacher_id',$id); 
 
$query =  DB::table('zhuanlans')->select(['id','zl_name as name','zl_teacher_id as tid','ke_type','created_at']) 
           ->where('zl_teacher_id',$id)->union($xk); 
 
$querySql = $query->toSql(); 
$result = DB::table(DB::raw("($querySql) as a"))->mergeBindings($query) 
           ->orderBy('created_at','desc')->paginate(10); 

联合查询用于将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同,另一个Select语句的结果集列名将被忽略,且其他查询字段数必须和第一个相同。

实例:解决两表聚合分页问题

public function getAllSchool($params, $size = 10)
    {
        $xk =  DB::connection('neworiental_v3')->table('entity_private_school')->select([DB::raw('"4" as type'),'id','name']);

        $query =  DB::connection('neworiental_v3')->table('entity_public_school')->select([DB::raw('"2" as type'),'id','name']);
         
        if (isset($params['id']) && $params['id']) {
            $xk = $xk->where('id', '=', $params['id']);
            $query = $query->where('id', '=', $params['id']);
        }

        if (isset($params['name']) && $params['name']) {
            $xk = $xk->where('name', 'like', '%'.$params['name'].'%');
            $query = $query->where('name', 'like', '%'.$params['name'].'%');
        }

        if (isset($params['status']) && $params['status']) {
            $xk = $xk->where('status', '=', $params['status']);
            $query = $query->where('status', '=', $params['status']);
        }
    
        $query =  $query->union($xk);
        $querySql = $query->toSql();

        $result = DB::connection('neworiental_v3')->table(DB::raw("($querySql) as a"))->mergeBindings($query)->orderBy('id', 'ASC')->paginate($size)->toArray();
        return $result;
    }

你可能感兴趣的:(Laravel UNION联合查询并分页)