Построение запроса с несколькими параметрами соединения на laravel - PullRequest
0 голосов
/ 23 мая 2018

Это запрос sql:

select tags.desc as areas,
    COUNT(planificacion_info.id_area) as cantidad_intervenciones,
    SUM(CASE WHEN planificacion_info.tipo_geometria = 'Polygon' and 
        planificacion_info.estado = true THEN 1 ELSE 0 END) as poligonos, 
    SUM(CASE WHEN planificacion_info.tipo_geometria = 'LineString' and 
        planificacion_info.estado = true THEN 1 ELSE 0 END) as lineas, 
    SUM(CASE WHEN planificacion_info.tipo_geometria = 'Point' and planificacion_info.estado = true THEN 1 ELSE 0 END) as puntos,
    min(planificacion_info.created_at::time) as hora from "tags" 
left join 
    "planificacion_info" on "planificacion_info"."id_area" = "tags"."id_tag"   and 
        "tags"."estado" = true and 
        "planificacion_info"."estado" = true and planificacion_info.created_at::Date = ('2018-03-09')
where 
    tags.grupo = 'area'
group by "tags"."desc"

Мне нужно разобрать его в Query Build, он у меня есть, но он не работает должным образом:

$areas = \DB::table('tags')
        ->leftJoin('planificacion_info', function($query) use($fecha){
            $query->on('planificacion_info.id_area', '=', 'tags.id_tag')
            ->where('tags.grupo','=','area')
            ->where('tags.estado','=','true')
            ->where('planificacion_info.estado','=','true')
            ->where(DB::raw('planificacion_info.created_at::Date'), '=', $fecha);
        })
        ->selectRaw("tags.desc as areas, COUNT(planificacion_info.id_area) as cantidad_intervenciones, SUM(CASE WHEN planificacion_info.tipo_geometria = 'Polygon' and planificacion_info.estado = true THEN 1 ELSE 0 END) as poligonos,
        SUM(CASE WHEN planificacion_info.tipo_geometria = 'LineString' and planificacion_info.estado = true THEN 1 ELSE 0 END) as lineas,
        SUM(CASE WHEN planificacion_info.tipo_geometria = 'Point' and planificacion_info.estado = true THEN 1 ELSE 0 END) as puntos,
        min(planificacion_info.created_at::time) as hora")
->groupBy('tags.desc');

Я вижу проблемув объединенном предложении.Это не работает правильно.Спасибо.

Это результат:

[ { "areas":"Ambiente y Espacio P\u00fablico",
    "cantidad_intervenciones":"0",
    "poligonos":"0",
    "lineas":"0",
    "puntos":"0",
    "hora":null
  },
  { "areas":"Arbolado",
    "cantidad_intervenciones":"0",
    "poligonos":"0",
    "lineas":"0",
    "puntos":"0",
    "hora":null
   }, ...

Я думаю, что эта строка не работает:

->where('tags.grupo','=','area')

1 Ответ

0 голосов
/ 23 мая 2018

В исходном запросе ограничение where() находится за пределами leftJoin():

$areas = \DB::table('tags')
    ->leftJoin('planificacion_info', function($query) use($fecha) {
        ...
    })
    ->where('tags.grupo','=','area')
    ->selectRaw(...)
    ->groupBy('tags.desc');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...