2013-06-04 4 views
0

Как я могу сделать, чтобы воспроизвести этот sql-оператор ниже с построителем запросов или красноречивым? Я попытался использовать DB :: raw ... и присоединиться («что-то», функция ($ join) ... но она не работает. Если кто знает, как это понять, пожалуйста, покажите мне пример.left join с подзапросами в laravel

SELECT 
musica.titulo, 
p.qtd_pedidos, 
a.qtd_avaliacoes, 
a.media_avaliacoes 
FROM 
musica 
LEFT JOIN (
    SELECT musica_id, COUNT(pedido.id) as qtd_pedidos 
    FROM pedido GROUP BY pedido.musica_id 
) as p ON p.musica_id = musica.id 
LEFT JOIN (
    SELECT musica_id, COUNT(avaliacao.id) as qtd_avaliacoes, 
    ROUND(AVG(avaliacao.nota),1) as media_avaliacoes 
    FROM avaliacao GROUP BY avaliacao.musica_id 
) as a ON a.musica_id = musica.id 

ответ

1

Предполагая, что вы описали модель Musica, Pedido и Avaliacao их отношения:

Musica::with(
    array('pedido' => function($query) { 
       $query->select(DB::raw('musica_id, COUNT(pedido.id) as qtd_pedidos')) 
        ->groupBy('musica_id'); 
      }, 
      'avaliacao' => function($query) { 
       $query->select(DB::raw(
           'musica_id, ' 
           . 'COUNT(avaliacao.id) as qtd_avaliacoes, ' 
           . 'ROUND(AVG(avaliacao.nota),1) as media_avaliacoes' 
          )) 
        ->groupBy('musica_id'); 
      } 
    ) 
)->get();