Laravel 5中的复杂查询

时间:2015-03-09 01:31:17

标签: mysql laravel activerecord eloquent

我想将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是的ocupation类型列表强> agredidos

并且它们会被警告

年份的传入变量过滤掉

http://alertas.clibrehonduras.com/reportes/sujeto_agredido_genero

感谢您的帮助。这可能是一个简单的解决方案,但我是Laravel ENV的完全新手。

1 个答案:

答案 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 )

    ]);

这可能适用于你:)