【发布时间】:2015-03-26 09:59:44
【问题描述】:
我使用 Laravel 已经五天了,在观看了 Jeffrey Way 几个小时后,我决定深入研究构建一个应用程序来学习。我正在将一个旧应用迁移到 L5 作为一种学习方式。
我刚刚尝试了这种没有错误但返回空记录的语法,因此输出不正确。旧 SQL 为以下输入返回一条记录。
老 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记录。
【问题讨论】:
-
问一个简单的问题(因为它有点难读)你为什么不使用任何关联?会容易得多,并且还会生成最大值
-
对不起@Levente Nagy,我为每个表都定义了关系。这是你的意思吗?
-
感谢@Levente Nagy,但这就是我卡住的地方。当有几个表同时链接时如何利用关系?
标签: php eloquent laravel-5 query-builder