将SQL转换为雄辩的

将SQL转换为雄辩的,sql,laravel,eloquent,Sql,Laravel,Eloquent,如何将此代码sql转换为elount SELECT CONCAT(FLOOR(sum(diferenca)/60),'h',MOD(sum(diferenca),60),'m') as tempo FROM (SELECT TIMESTAMPDIFF(MINUTE, m1.created_at, min(m2.created_at)) as diferenca FROM mensagens m1 JOIN mensagens m2 ON m1.remetente_

如何将此代码
sql
转换为
elount

SELECT
    CONCAT(FLOOR(sum(diferenca)/60),'h',MOD(sum(diferenca),60),'m') as tempo
FROM
(SELECT
    TIMESTAMPDIFF(MINUTE, m1.created_at, min(m2.created_at)) as diferenca
FROM
    mensagens m1
JOIN
    mensagens m2 ON m1.remetente_id = m2.destinatario_id AND m2.remetente_id = m1.destinatario_id AND m2.created_at > m1.created_at
GROUP BY
    m1.id) AS table1
WHERE
    (SELECT
        MIN(id)
    FROM
        mensagens
    WHERE
        destinatario_id = 2);
我试着这样做,但没有成功。正在给我错误,因为它将concat select视为列

Mensagem::whereIn('id', function($query) {
     $query->selectRaw('TIMESTAMPDIFF(MINUTE, m1.created_at, min(m2.created_at)) as diferenca')
        ->from('mensagens as m1')
        ->join('mensagens as m2', 'm1.remetente_id', '=', 'm2.destinatario_id')
        ->where('m2.created_at', '>', 'm1.created_at')
        ->groupBy('m1.id');
     })
     ->where(function($query) {
           $query->selectRaw('min(id)')
                ->from('mensagens')
                ->where('destinatario_id', 2);
     })
    ->select("CONCAT(FLOOR(sum(diferenca)/60),'h',MOD(sum(diferenca),60),'m') as tempo")
      ->get();

使用
selectRaw()
而不是
select()
@BartłomiejSobieszek我需要获得以小时和分钟为单位的平均响应。如果您知道更好的方法,我接受。@JonasStaudenmeir这解决了之前的错误,但现在第二个selectRaw没有检测到第一个selectRaw的“差异”。“未找到列:“字段列表”中的1054未知列‘diferencea’。您必须使用
fromSub()
而不是
其中()