使用Join,Max + groupBy orderBy Query Builder Laravel

时间:2018-05-14 04:51:32

标签: php laravel laravel-query-builder

我试图从mysql翻译此查询

SELECT usuario_cia.idusuario_cia,usuario_cia.nombre,usuario_cia.fkcompania,
            mobil_gps.idmobil_gps,  mobil_gps.fkmobil,MAX(mobil_gps.fechahora), mobil_gps.bateria 
    FROM usuario_cia 
    INNER JOIN mobil_gps ON mobil_gps.fkusuario= usuario_cia.idusuario_cia
    WHERE usuario_cia.fkcompania=24  
    GROUP BY idusuario_cia 
    ORDER BY mobil_gps.fechahora DESC;

使用查询生成器在我的Laravel模型中的一个函数,我对max,rigth有一个很大的问题,现在我有了这个:

$datos=$query->join('mobil_gps','mobil_gps.fkusuario','usuario_cia.idusuario_cia')

    ->select( 'usuario_cia.idusuario_cia','usuario_cia.nombre','usuario_cia.fkcompania',
        \DB::raw('mobil_gps.idmobil_gps'),\DB::raw('mobil_gps.fechahora'), \DB::raw('mobil_gps.fkmobil'),\DB::raw('mobil_gps.bateria'))

    ->where('usuario_cia.fkcompania', $id_compania)
    //->max(\DB::raw('mobil_gps.fechahora'))
    ->groupBy('usuario_cia.idusuario_cia')
    ->orderBy(\DB::raw('mobil_gps.fechahora'), 'desc')

    ->get()->toArray();

但是如果我解开最大部分而且会崩溃。

你可以给我任何建议吗?

1 个答案:

答案 0 :(得分:1)

您必须在MAX()中使用select()

->select(..., \DB::raw('MAX(mobil_gps.fechahora)'), ...)

这也是您的查询中仅 的地方,您需要DB::raw()