【问题标题】:Convert SQL into Laravel Eloquent将 SQL 转换为 Laravel Eloquent
【发布时间】:2018-08-06 13:09:24
【问题描述】:

我有这个 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();

【问题讨论】:

    标签: laravel eloquent


    【解决方案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();
    

    【讨论】:

    • 代码执行,但没有找到任何结果。当我在数据库上运行 sql 时,它返回正常。
    • 我认为问题出在子查询的位置,因为我用数字替换它们并返回了结果。
    • 我这样做只是为了测试。 ->where('m2.from_id','=','1')->where('m2.to_id','=','2');
    • 你必须使用whereColumn() 而不是where()
    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2019-03-02
    • 2021-11-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多