Laravel 5 Eloquent 从列中选择最大值时出现查询语法问题

Laravel 5 Eloquent Query syntax issue when selecting MAX value from column

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

我刚刚尝试了这个语法,它没有错误地工作但返回了一个空记录,所以输出不正确。旧 SQL returns 一条记录用于下面的输入。

旧的SQL和新的L5 Query结果不同还有什么不同?谢谢!

我正在尝试复制这个 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记录。

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

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

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

注意传递给where方法的值是被PDO绑定的。也就是说,它总是作为字符串进行比较,而不是作为 table 列进行比较。