如何在Laravel Eloquent中获取包含最大值的所有行?
获取某列最大值对应的所有行(Laravel Query Builder)
你的代码执行失败的原因是:在where方法中直接将子查询字符串作为第三个参数传入时,Laravel会将其视为普通字符串值进行匹配,而非执行这个子查询,导致无法正确匹配到最大值对应的行。
正确写法一:使用whereRaw执行原生SQL条件
直接将包含子查询的条件语句传入whereRaw,Laravel会原样执行该SQL片段:
$data = DB::table($table) ->whereRaw('col2 = (SELECT max(col2) from '.$table.')') ->get($fields);
正确写法二:先查询最大值再匹配
分两步执行,先获取col2的最大值,再用该值作为查询条件,逻辑更直观:
// 第一步:获取col2的最大值 $maxCol2 = DB::table($table)->max('col2'); // 第二步:查询最大值对应的所有行 $data = DB::table($table) ->where('col2', $maxCol2) ->get($fields);
正确写法三:使用Query Builder子查询构造器
利用Laravel的子查询构造器,避免手动拼接SQL,更符合框架风格且更安全:
// 构造子查询获取最大值 $maxSubquery = DB::table($table)->selectRaw('max(col2)'); // 主查询匹配子查询结果 $data = DB::table($table) ->where('col2', '=', $maxSubquery) ->get($fields);
内容的提问来源于stack exchange,提问作者bart2puck
相关产品推荐
相关产品推荐

