【问题标题】:Laravel 5 Eloquent Query syntax issue when selecting MAX value from column从列中选择 MAX 值时 Laravel 5 Eloquent Query 语法问题
【发布时间】: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


【解决方案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 约束。也就是说,它总是作为字符串进行比较,而不是作为表格列。

【讨论】:

  • 太棒了!非常感谢!我现在需要弄清楚人际关系的方式。再次感谢!
猜你喜欢
  • 2015-10-08
  • 2015-02-23
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多