2013-06-05 22 views
6

Mit Laravel/fließend Abfrage-Generator, ich versuche, einen konstanten Feldwert für eine Union (ED) -Auswahl, die anschließend geordnet wird, zu übergeben. Ich habe das Rezept nicht gefunden, um das Folgende fließend zu machen. Die Gewerkschaften sind einfach, aber wie bringt man das Feld zum Arbeiten?Feldkonstante mit Laravel Query Builder

Stellen Sie sich zwei einfache Tabellen (ausgelassen) und eine Union wählen:

select field1, field2, 'type1' as field3 from table1 
UNION 
select field1, field2, 'type2' as field3 from table2 
ORDER BY field2 

Die beste Antwort, die ich mit so weit habe kommen, ist eine DB :: Abfrage mit einem Abfrage-String zu verwenden, ich selbst herstellen . Laravel/fluent scheint angesichts der Testfälle, die ich ausprobiert habe, nicht bereit zu sein. Die Verwendung von RAW für eine Auswahl funktioniert großartig, bis Sie versuchen, das Paar der ausgewählten Tabellenabfragen zu bestellen.

SELECT field1, field2 FROM 
(
    SELECT fld1A as field1, 'FOO' as field2 from table1 
    UNION ALL 
    SELECT fld2A as field1, 'BAR' as field2 from table2 
) 
temp_table order by somefield 
+0

Sie Fall können auch: http://stackoverflow.com/questions/3389713/how-does-mysql-case- Arbeit – Hackerman

Antwort

3

Auf diese Weise wahrscheinlich:

$users = DB::table('users') 
      ->select(DB::raw("'FOO' as field2")) 
      ->get(); 
7

Laravel Unter Verwendung von 4 und GROUP BY, anstatt ORDER BY Ich glaube, Sie so etwas wie zu tun:

$t1 = DB::table('table1') 
    ->select('field1',DB::raw("'FOO' as field2")) 
    ->groupBy('field2'); 
$t2 = DB::table('table2') 
    ->select('field1',DB::raw("'BAR' as field2")) 
    ->groupBy('field2'); 
$result = $t1->union($t2)->get(); 

Ich fand, dass $t1 kann in diesem Fall eine Instanz von Illuminate\Database\Query\Builder oder Illuminate\Database\Eloquent\Builder sein, aber das Union-Argument ($t2) muss vom Typ Illuminate\Database\Query\Builder sein .

Das bedeutet, dass Sie mit etwas eifrig Laden wie verwenden:

$t1 = MyTableModel::with('table3')->select...

Verwandte Themen