Nevermind, $results = DB::select($query); at the end.
Complex sql query
Hello everyone, I want to migrate a old site of stadistics to laravel, But I wander, what is the laravel way to handle this query, I mean, on active records I had to go directly to write the query, there were no way to handle it. maybe exist something similar to write this directly, or a librarie or something !! this is the query:
public function agresiones_get_genero($year){
$query = " SELECT tsagredido.id, tsagredido.tsagredido,
SUM( IF (agredidos.gen_id = 1, 1, 0) ) m, SUM( IF (agredidos.gen_id = 2, 1, 0) ) f,
SUM( IF (agredidos.gen_id = 3, 1, 0) ) l, SUM( IF (agredidos.gen_id = 4, 1, 0) ) n
FROM agredidos
INNER JOIN tsagredido ON agredidos.tsagredido_id = tsagredido.id
INNER JOIN alertas ON agredidos.alertas_id = alertas.id
WHERE alertas.anio = $year AND alertas.publicada_id = 1 GROUP BY agredidos.tsagredido_id";
return $this->find_all_by_sql($query);
}
There are 4 tables involve, tsagredidos, gender, agredidos and alerts (edited, I write this 4 years ago :/)
where alert is the bridge, the selected options for every alerts were gender as tsagredidos, gender contemps male(m), female(f), Lesbians,gays, Transexuals(l) and none(n), while tsagredidos is another class of agressions related to the "alert" The query reflets the results sumary for alerts totals of m, f, l and n for every tsagredidos option on a given year.
if you wander how it looks, this is the view, where this model method reflecs http://alertas.clibrehonduras.com/reportes/sujeto_agredido_genero
Thaks for ANY help I know is a tough one!!!
Agredidos::join('tsagredido','agredidos.tsagredido_id','=','tsagredido.id')
->join('alertas','agredidos.alertas_id','=','alertas.id')
->where('alertas.anio',$year)
->where('alertas.publicada_id',1)
->groupBy('agredidos.tsagredido_id')
->get([
'tsagredido.id,',
'tsagredido.tsagredido',
DB::raw('SUM( IF (agredidos.gen_id = 1, 1, 0) ) m'),
DB::raw('SUM( IF (agredidos.gen_id = 2, 1, 0) ) f'),
DB::raw('SUM( IF (agredidos.gen_id = 3, 1, 0) ) l'),
DB::raw('SUM( IF (agredidos.gen_id = 4, 1, 0) ) n )
]);
or
DB::table('agredidos')->join('tsagredido','agredidos.tsagredido_id','=','tsagredido.id')
->join('alertas','agredidos.alertas_id','=','alertas.id')
->where('alertas.anio',$year)
->where('alertas.publicada_id',1)
->groupBy('agredidos.tsagredido_id')
->get([
'tsagredido.id,',
'tsagredido.tsagredido',
DB::raw('SUM( IF (agredidos.gen_id = 1, 1, 0) ) m'),
DB::raw('SUM( IF (agredidos.gen_id = 2, 1, 0) ) f'),
DB::raw('SUM( IF (agredidos.gen_id = 3, 1, 0) ) l'),
DB::raw('SUM( IF (agredidos.gen_id = 4, 1, 0) ) n )
]);
This might work for u :)
Please or to participate in this conversation.