从列中选择MAX值时,Laravel 5 Eloquent Query语法问题

时间:2015-03-26 09:59:44

标签: php eloquent laravel-5 query-builder

我在Laravel待了五天,经过几个小时的观看Jeffrey Way后,我决定深入研究构建应用程序以便学习。我正在将旧应用程序迁移到L5作为一种学习方式。

我只是尝试了这种语法,它没有错误但返回了一个空记录,因此输出不正确。旧的SQL为下面的输入返回一条记录。

旧SQL和新L5查询之间的结果有何不同?谢谢!

我正在尝试复制这个SQL:

SELECT DISTINCT
    TBA.*, 
    TBB.*,                      
    MAX(TBA.mv_a_m_loss) as mv_a_m_loss
FROM TBA,
    TBB,
    TBC
WHERE TBB.id = 1
AND TBC.id = 1
AND TBB.conductor_temp = TBA.conductor_temp
AND TBB.conductor_size_mm_sq = TBA.conductor_size_mm_sq
AND TBA.mv_a_m_loss < 50
AND TBC.id = TBB.id
AND TBC.id = TBA.id

这是我的Laravel 5 Eloquent语法:

$temp = DB::table('TBC')
    ->join('TBB', 'TBC.id', '=', 'TBB.id')
    ->join('TBA', 'TBC.id', '=', 'TBA.id')
    ->where('TBC.TBA_id', '=', 1)
    ->where('TBC.TBB_id', '=', 1)
    ->where('TBA.mv_a_m_loss', '<', 50)
    ->where('TBB.conductor_temp', '=', 'TBA.conductor_temp')
    ->where('TBB.conductor_size_mm_sq', '=', 'TBA.conductor_size_mm_sq')
    ->distinct()->get(['TBA.*', 'TBB.*', DB::raw('MAX(TBA.mv_a_m_loss) AS max_mv_a_m_loss')]);
dd($temp);

旧SQL的结果是单个记录,L5结果是NULL记录。

1 个答案:

答案 0 :(得分:1)

没有考虑你是否应该使用关系,但这里有适合你的解决方案:

->whereRaw('TBB.conductor_temp = TBA.conductor_temp')
->whereRaw('TBB.conductor_size_mm_sq = TBA.conductor_size_mm_sq')

您也可以使用select(x,'=', DB::raw(..)),没有区别。

请注意,传递给where方法的值受PDO 约束。也就是说,它总是被比较为字符串,而不是表格列。