我在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记录。
答案 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 约束。也就是说,它总是被比较为字符串,而不是表格列。