首页 > 解决方案 > 将 SQL 转换为 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

我怎样才能转换成雄辩的?直到现在我都这样做了,但是在子查询的 where 部分不知道该怎么做。

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

标签: laraveleloquent

解决方案


你可以试试这个:

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

推荐阅读