【问题标题】:How to convert SQL query to query builder?如何将 SQL 查询转换为查询生成器?
【发布时间】:2019-06-21 10:11:30
【问题描述】:

controlens 是我数据库中的一个表,entite、state 是这个表的字段

SELECT a.entite, a.etat,  COUNT(a.etat) as nombre_toperform, b.nombre_performed,c.nombre_incompatible
FROM `controlens` a

LEFT JOIN ( SELECT entite,COUNT(etat) as nombre_performed from `controlens` WHERE etat like 'PERFORMED' GROUP BY entite, etat) b on a.entite = b.entite

LEFT JOIN ( SELECT entite,COUNT(etat) as nombre_incompatible from `controlens` WHERE etat like 'INCOMPATIBLE' GROUP BY entite, etat) c on a.entite = c.entite

WHERE a.etat like '%TOPERFORM%' 
GROUP BY a.entite, a.etat, b.nombre_performed,c.nombre_incompatible

【问题讨论】:

  • 这是英文版的 Stackoverflow。请用英语发表您的问题。
  • 帮我把sql查询翻译成查询生成器查询
  • 编辑您的问题,并向我们展示您尝试执行此操作的一些代码。我们无法为您制作所有内容,请查看如何发布问题

标签: laravel laravel-5 eloquent


【解决方案1】:

您可能有几种方法可以做到这一点。这是一个可能可行的想法(注意:尚未完全测试,因此可能需要一些调整):

$toPerform = '%TOPERFORM%';
$subQuery1 = 'SELECT entite,COUNT(etat) as nombre_performed from `controlens` WHERE etat like 'PERFORMED' GROUP BY entite, etat';
$subQuery2 = 'SELECT entite,COUNT(etat) as nombre_incompatible from `controlens` WHERE etat like 'INCOMPATIBLE' GROUP BY entite, etat';

DB::table('controlens as a')->select([
    'a.entite',
    'a.etat',
    DB::raw('COUNT(a.etat) AS nombre_toperform'),
    'b.nombre_performed',
    'c.nombre_incompatible'
])
->leftJoin(DB::raw("($subQuery1) as b"), 'a.entite', '=', 'b.entite')
->leftJoin(DB::raw("($subQuery2) as c"), 'a.entite', '=', 'c.entite')
->where('a.etat', $toPerform)
->groupBy('a.entite', 'a.etat', 'b.nombre_performed', 'c.nombre_incompatible');

或者,您可以试试这个包,看看它是否有助于解决这个问题: eloquent-subquery-magic

除此之外,这里有一些有用的文章可能会为您指明正确的方向:

subquery with join in laravel

Laravel Fluent Query Builder Join with subquery

How to write this (left join, subquery ) in Laravel 5.1?

【讨论】:

  • 感谢 cfnerd 我已经测试了你的答案,这对我很有帮助
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 2023-01-20
  • 2017-06-01
  • 2019-09-08
  • 2015-12-08
  • 2023-01-14
  • 2021-10-14
  • 2021-04-30
相关资源
最近更新 更多