使用 Join、Max + groupBy orderBy 查询生成器 Laravel

Usuing Join, Max + groupBy orderBy Query Builder Laravel

我正在尝试翻译来自 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 模型中带有查询生成器的一个函数,我的最大值有一个大问题,现在我有这个:

$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();

但如果我取消注释最大部分,一切都会崩溃。

你能给我什么建议吗?

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

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

这也是您查询中唯一需要DB::raw()的地方。