2013-06-05 40 views
6

Sử dụng trình tạo truy vấn laravel/fluent, tôi đang cố gắng tạo ra một giá trị trường liên tục để chuyển qua lựa chọn công đoàn (ed) sau đó được sắp xếp. Tôi đã không tìm thấy công thức để làm như sau với thông thạo. Các công đoàn là dễ dàng, nhưng làm thế nào để bạn có được lĩnh vực liên tục để làm việc?hằng số trường sử dụng trình tạo truy vấn laravel

Hãy tưởng tượng hai bảng đơn giản (bỏ qua) và một liên minh chọn:

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

Câu trả lời tốt nhất mà tôi đã đưa ra cho đến nay, là sử dụng một DB :: truy vấn với một chuỗi truy vấn tôi sản xuất bản thân mình . Laravel/fluent dường như chưa sẵn sàng để xử lý trường hợp này, cho các trường hợp thử nghiệm mà tôi đã thử. Sử dụng RAW cho một lựa chọn hoạt động tốt, cho đến khi bạn cố gắng đặt hàng cặp truy vấn bảng đã chọn.

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

Bạn cũng có thể sử dụng trường hợp: http://stackoverflow.com/questions/3389713/how-does-mysql-case- công việc – Hackerman

Trả lời

3

Bằng cách này, có thể là:

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

Sử dụng Laravel 4, và sử dụng GROUP BY, chứ không phải ORDER BY Tôi tin rằng bạn có thể làm điều gì đó như:

$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(); 

tôi thấy rằng $t1 trong trường hợp này có thể là phiên bản Illuminate\Database\Query\Builder hoặc Illuminate\Database\Eloquent\Builder, nhưng đối số công đoàn ($t2) phải thuộc loại Illuminate\Database\Query\Builder .

Điều này có nghĩa rằng bạn có thể sử dụng tải háo hức với cái gì đó như:

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

Các vấn đề liên quan