Sorting UNION queries with Laravel 4.1

前端 未结 5 1305
后悔当初
后悔当初 2020-12-19 09:44

I think there is something changed in the union between Laravel 4 and Laravel 4.1. I have 2 models.

$pho         


        
5条回答
  •  被撕碎了的回忆
    2020-12-19 10:22

    This i believe is a bug and is not fixed yet. I have the same issue when trying to sort union queries.

    $query1->union($query2)->orderBy('foo','desc') 
    

    causes the order by clause to be added to $query 1 alone.

    Adding orderBy individually to $query1 and $query2 and then doing a union like below

    $query1->orderBy('foo desc');
    $query2->orderBy('foo desc');
    $query1->union($query2);
    

    This obviously works but it does not produce the same result as doing a orderBy on the union's result.

    For now, the workaround seem to be doing something like

    $query = $query1->union($query2);
    $querySql = $query->toSql();
    $query = DB::table(DB::raw("($querySql order by foo desc) as a"))->mergeBindings($query);
    

    This would produce a query like:

    select * from (
      (select a as foo from foo)
      union
      (select b as foo from bar)
    ) as a order by foo desc;
    

    And that does the trick.

提交回复
热议问题