我想将KBPHP的旧统计网站迁移到Laravel 5.我想知道,Laravel处理此查询的方法是什么?我的意思是,在ActiveRecords上,我不得不直接手动编写查询,没有办法处理它 也许存在类似于在Laravel上写这个或者手写的方法 !!
这是查询:
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);
}
将agredidos翻译为攻击, tsagredidos 就像是说“被殴打者的类型”
共有4个表格, tsagredidos ,性别, agredidos 和提醒。
警报与 agredidos 相关, agredidos 包含与 tsagredidos 和性别的关系
性别包含男性(m),女性(f),女同性恋者,同性恋者,变性者(l)和无(n)选项,而tsagredidos是
并且它们会被警告
年份的传入变量过滤掉http://alertas.clibrehonduras.com/reportes/sujeto_agredido_genero
感谢您的帮助。这可能是一个简单的解决方案,但我是Laravel ENV的完全新手。
答案 0 :(得分:1)
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 )
]);
或
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 )
]);
这可能适用于你:)