2013-06-05 3 views
6

Используя laravel/real query builder, я пытаюсь вызывать постоянное значение поля для выбора union (ed), который затем упорядочивается. Я не нашел рецепта, чтобы сделать следующее с беглостью. Профсоюзы просты, но как вы можете заставить поле работать?константа поля с использованием построителя запросов laravel

Представьте себе два простых таблиц (опущено) и объединение выбора:

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

Лучший ответ, который я придумал до сих пор является использование DB :: запрос со строкой запроса я изготовить сам , Laravel/свободно говорит, что он не готов справиться с этим делом, учитывая те тесты, которые я пробовал. Использование RAW для выбора отлично работает, пока вы не попытаетесь заказать пару выбранных табличных запросов.

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

Вы можете также использовать случай: http://stackoverflow.com/questions/3389713/how-does-mysql-case- Работа – Hackerman

ответ

3

Таким образом, вероятно:

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

Использование Laravel 4, и с помощью GROUP BY, а не ORDER BY Я считаю, что вы можете сделать что-то вроде:

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

я обнаружил, что $t1 в этом случае может быть экземпляром Illuminate\Database\Query\Builder или Illuminate\Database\Eloquent\Builder, но аргумент объединения ($t2) должен быть типа Illuminate\Database\Query\Builder ,

Это означает, что вы можете использовать жадную загрузку что-то вроде:

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

Смежные вопросы