将SQL转换成Laravel口才

时间:2018-08-06 03:13:46

标签: laravel eloquent

我有这个SQL查询:

SELECT
  m1.id
FROM
  messages m1
WHERE
  m1.to_id = 1 AND m1.created_at < (
    SELECT 
      m2.created_at
    FROM
      messages m2
    WHERE
      m2.from_id = m1.to_id AND m2.to_id = m1.from_id)
GROUP BY
    m1.id

我怎样才能变得雄辩?直到现在,我仍然这样做,但是在子查询中的那部分不知道该怎么做。

Message::where('to_id', 1)
            ->where('created_at', '<', function($q) {
               $q->from('messages');
               $q->select('created_at');
            })
            ->select('id')
            ->groupBy('id')
            ->get();

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

Message::where('to_id', 1)
            ->where('created_at', '<', function($q) {
                $q->from('messages AS m2')
                  ->select('created_at')
                  ->where('m2.from_id ','=', 'messages.to_id ')
                  ->where('m2.to_id','=','messages.from_id');
            })
            ->select('id')
            ->groupBy('id')
            ->get();