【问题标题】:Convert MySQL Query to Laravel query将 MySQL 查询转换为 Laravel 查询
【发布时间】:2018-02-16 22:42:29
【问题描述】:

我想将 mysql 查询转换为 laravel 查询。

MySQL:

SELECT * FROM scadenze WHERE created_at IN(SELECT MAX(created_at) FROM scadenze GROUP BY processo_id)

Laravel(我遇到错误,stdClass 类的对象无法转换为字符串):

DB::table('scadenze')->whereIn('created_at', DB::select("( SELECT MAX(created_at) FROM scadenze GROUP BY processo_id )"))->get();

【问题讨论】:

    标签: mysql laravel laravel-5


    【解决方案1】:
    DB::table('scadenze')->whereIn('created_at', function($query) {
       $query->from('scadenze')
             ->groupBy('processo_id')
             ->select(DB::raw('max(created_at)');
    })->get();
    

    【讨论】:

    • 新错误:调用未定义的方法 Illuminate\Database\Query\Expression::groupBy()
    • 尝试先拨打groupBy,然后拨打select,我已经编辑了答案
    【解决方案2】:

    试试这个:

    DB::table('scadenze')
        ->whereRaw(DB::raw("created_at IN (SELECT MAX(created_at) FROM scadenze GROUP BY processo_id)"))
        ->get();
    

    希望对你有帮助!

    【讨论】:

    • 我将变量插入 dd();但我得到另一个错误: SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SELECT MAX(created_at) FROM scadenze GROUP BY processo_id”附近使用正确的语法(SQL:select * from scadenze where created_at IN SELECT MAX(created_at) FROM scadenze GROUP BY processo_id)
    • 我已经更新了答案,在 IN 中缺少括号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多