如何将此 MySQL 查询转换为 Laravel?

Posted

技术标签:

【中文标题】如何将此 MySQL 查询转换为 Laravel?【英文标题】:How to convert this MySQL query to Laravel? 【发布时间】:2019-11-04 03:09:30 【问题描述】:

这是我的 mysql 查询(在 phpMyAdmin 中工作):

SELECT workcenter, (SUM(w1+w2 +w3 +w4)/ (COUNT(DISTINCT(teknisi))*40*4) )*100 AS total FROM `team` GROUP by workcenter ORDER BY total

然后,我在 Laravel Sintax 中尝试如下(不起作用):

$sql = Team::groupBy('workcenter')->select('workcenter', \DB::raw('(SUM(w1+w2+w3+w4)/ (COUNT(DISTINCT(teknisi))*30*4) )*100 AS total'))
            ->OrderBy('total', 'Desc')
            ->get();

当我运行 laravel sintax 时,它没有显示任何错误,但输出什么都没有..

请任何人帮助我将 MySQL 查询转换为 Laravel Sintax。谢谢!

【问题讨论】:

我已经试过你的代码了。它工作正常。您的模型是否连接了正确的数据库或定义了正确的表名? 【参考方案1】:

我认为您已经足够接近了,但是,这看起来不像是使用 Eloquent ORM 进行分组的正确方法。尝试使用原始表达式,这样可能会起作用:

$sql = DB::table('team')
                     ->select(DB::raw('workcenter, (SUM(w1+w2 +w3 +w4)/ (COUNT(DISTINCT(teknisi))*40*4) )*100 as total'))
                     ->orderBy('total', 'desc')
                     ->groupBy('workcenter')
                     ->get();

在此处了解有关原始表达式的更多信息 - https://laravel.com/docs/6.x/queries#raw-expressions

【讨论】:

感谢您的回答先生,我已经复制+粘贴了sintax,但仍然无法正常工作,嗯【参考方案2】:

每当我想将 SQL 查询转换为 Laravel 时,我总是更改一个列名,laravel 错误报告将显示您当前的查询,您可以将其与 SQL 查询进行比较

【讨论】:

我的 sintax 没有导致任何错误,但只显示 'nothing' idk whyy :( 如果您将列名 workcenter 更改为 workcente2r,例如,这应该会导致未找到列的错误,并且会输出带有错误列的查询。

以上是关于如何将此 MySQL 查询转换为 Laravel?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 sql 查询转换为 laravel 查询生成器

如何将此 SQL 转换为 Laravel Query Builder 查询?

将 mysql 查询转换为 laravel 查询生成器

如何将此sql语句转换为laravel orm?

请帮我将此查询转换为laravel [关闭]

如何将此 MySQL SELECT 查询转换为 DELETE 查询?