Как написать подзапрос в FROM с помощью Eloquent? - PullRequest
0 голосов
/ 23 июня 2018

Я хочу объединить подзапрос с моим основным запросом

Это мой необработанный запрос

select field1, field3, total
from (select field1, field3, sum(field2) as total
      from sales
      group by field1, field2
      having total <> 0
     ) s
group by field1;

Я пытался объединить его

$sub = Sales::select(DB::raw('field1,field3,SUM(field2)as total'))         
            ->groupBy('field1',DB::raw('field3 having total<> 0'));  

 $main = DB::table(DB::raw("({$sub->toSql()}) as sub") )
            ->select('field1', 'field3','total');
            $main ->mergeBindings($sub->getQuery());
            $main ->groupBy('field1');       
            $main ->get();

Но этоне возвращает никаких данных.Что с этим не так?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Если вы не используете Laravel 5.6 для метода fromSub, упомянутого в ответе @ DigitalDrifter, просто включите свой подзапрос в функцию from()

$sub = Sales::select(DB::raw('field1,field3,SUM(field2)as total'))         
        ->groupBy('field1',DB::raw('field3 having total<> 0'));

YourMainModel::query()
->select('field1', 'field3','total')
->from(DB::raw("({$sub->toSql()}) as sub"))
->mergeBindings($sub->getQuery())
->groupBy('field1')
->get();
0 голосов
/ 23 июня 2018

Я бы рекомендовал использовать метод fromRaw:

$finalQuery = self::newQuery()->fromRaw("({$subQuery->toSql()}) as sub")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...