2013-04-25 1 views
1

Я пытаюсь получить столбцы таблицы, получая сумму другой связанной таблицы (я использую базу данных MySQL). Таблицы являются преимуществами и конверсиями, преимущества имеют столбец conversionID. Все они связаны с моделями. Сначала я пытался добиться этого с помощью метода красноречив, но я не мог добиться успеха, так что я придумал этот Fluent метод, который работает отлично:Laravel 3: Присоединение и получение суммы двух таблиц, есть ли лучший способ?

DB::table('conversions') 
    ->join('advantages','advantages.conversionID','=','conversions.id') 
    ->where('conversions.used','=',0) 
    ->group_by('conversions.id') 
    ->get(array(
     'conversions.*', 
     DB::raw('SUM(advantages.point) as totaladvantage') 
    )) 

Я думаю запрос описывает, как столбцы и то, что я хочу достигать.

Так что мой вопрос: есть ли более эффективный способ достичь этого? Использование DB::raw для этого показалось мне странным, и метод sum() возвращает сумму столбцов. Это почти единственное место, где я написал как свободный, так и сырой запрос в моем проекте, так что это заставило меня подумать, если я что-то упустил.

Заранее спасибо

ответ

3

Вы можете вызвать агрегатные методы через беглые

DB::table('conversions') 
    ->join('advantages','advantages.conversionID','=','conversions.id') 
    ->where('conversions.used','=',0) 
    ->group_by('conversions.id') 
    ->select(array(
     'conversions.*', 
     'advantages.point as totaladvantage') 
    ) 
    ->sum('advantages.point') 

Havent испытал это, так что дайте мне знать, как вы получите на

+1

'суммы (..)' немедленно возвращает сумма. Похоже, что после этого невозможно вызвать 'get'. –

+0

изменил ответ сейчас. Удалены, чтобы получить и заменить –