当前位置: 首页 > 知识库问答 >
问题:

将核心php查询转换为laravel 7

贾兴学
2023-03-14

我是新来的。

我已经开始将我的核心PHP项目转换为laravel 7。我被一些查询问题卡住了。

核心问题是:

           if ($key == 'fuel_theft' || $key == 'soft_alert') {
                if ($user_id > 1 && $user_id != 35) {
                    $al_sql = "SELECT count(DISTINCT(unitid)) as counter, ts.site_id FROM `tickets` ts LEFT JOIN users_site us ON us.site_id = ts.site_id WHERE ts.alert_type = '" . $key . "' AND us.userid = '" . $user_id . "' AND ts.status = 1 ";
                } else if ($user_id > 1 && $user_id == 35) {
                    $al_sql = "SELECT count(DISTINCT(unitid)) as counter, ts.site_id FROM `tickets` ts LEFT JOIN users_site us ON us.site_id = ts.site_id WHERE ts.alert_type = 'low_drop' AND us.userid = '" . $user_id . "' AND ts.status = 1 ";
                } else {
                    $al_sql = "SELECT count(DISTINCT(unitid)) as counter, ts.site_id FROM `tickets` ts WHERE ts.alert_type = '" . $key . "' AND ts.status = 1 ";
                }
            } else {
                if ($user_id > 1) {
                    $al_sql = "SELECT count(DISTINCT(unitid)) as counter, ts.site_id FROM `tickets` ts LEFT JOIN users_site us ON us.site_id = ts.site_id WHERE ts.alert_type = '" . $key . "' AND us.userid = '" . $user_id . "' AND ts.status = 1";
                } else {
                    $al_sql = "SELECT count(DISTINCT(unitid)) as counter, ts.site_id FROM `tickets` ts LEFT JOIN users_site us ON us.site_id = ts.site_id WHERE ts.alert_type = '" . $key . "' AND ts.status = 1";
                }
            }

            if ($key == 'fuel_theft') {
                $al_sql .= " AND ts.event_date BETWEEN '" . $f_date . "' AND '" . date(Config::get('constants.DATE')) . "'";
            } else {
                $al_sql .= " AND ts.event_date = '" . date(Config::get('constants.DATE')) . "'";
            }

            $al_sql .= " AND ts.site_id > 0 GROUP BY ts.site_id";

            $al_res = DB::select($al_sql);

我也把它改装成了拉威尔·布伊德。

但我对select列有异议。

$query->select('count(DISTINCT(unitid)) as counter', 'ts.site_id');

请让我知道我错在哪里。

我最后的疑问是

            $query = DB::table('tickets as ts');
            $query->select('count(DISTINCT(unitid)) as counter', 'ts.site_id');
            $query->leftJoin('users_site as us', 'us.site_id', '=', 'ts.site_id');

            if ($key == 'fuel_theft' || $key == 'soft_alert') {

                if ($user_id > 1 && $user_id != 35) {
                    $query->where('ts.alert_type', '=', $key);
                    $query->where('us.userid', '=', $user_id);
                } else if ($user_id > 1 && $user_id == 35) {
                    $query->where('ts.alert_type', '=', 'low_drop');
                    $query->where('us.userid', '=', $user_id);
                } else {
                    $query->where('ts.alert_type', '=', $key);
                }
            } else {

                if ($user_id > 1) {
                    $query->where('us.userid', '=', $user_id);
                }
            }

            if ($key == 'fuel_theft') {
                $query->whereBetween('ts.event_date', [$f_date, date(Config::get('constants.DATE'))]);
            } else {
                $query->where('ts.event_date', '=', date(Config::get('constants.DATE')));
            }

            $query->where('ts.site_id', '>', 0);
            $query->where('ts.status', '=', 1);
            $query->groupBy('ts.site_id');
            $al_res = $query->get();

错误是:未找到列:1054字段列表中的未知列'计数(DISTINCT(unitid))'

共有1个答案

阎建华
2023-03-14

您需要作为原始查询传递,而不是此行:

$query->select('count(DISTINCT(unitid)) as counter', 'ts.site_id');

你能试试这个吗:

$query->select(DB::raw('count(DISTINCT(unitid)) as counter'), 'ts.site_id');

 类似资料:
  • 问题内容: 我想将以下SQL查询转换为Elasticsearch之一。谁能帮上忙 我尝试了以下方法: 但不确定我是否做对了,因为它无法验证结果。似乎要在聚合内添加查询。 问题答案: 假设您使用Elasticsearch 2.x,则有可能在Elasticsearch中 具有 -semantics。我不知道2.0之前的可能性。 您可以使用新的Pipeline Aggregation Bucket Se

  • 问题内容: 多亏了Erwin Brandstetter在我之前的问题“具有has_many关系的订单”中的帮助,我的SQL查询才能正常工作。 如何将该SQL转换为ActiveRecords或AREL查询以在范围中使用? 我最近来的是在朋友的帮助下… …这给了我一个错误: 更新: 我之前的问题对相关的架构和查询有完整的描述。但是基本上Articles have_many Metrics和一个Metr

  • 问题内容: 实际上,我有1个查询,但无法将其转换为CakePHP查询格式。 当我将此查询转换为CakePHP时,会出现如下错误: 问题答案: 您可以轻松地在Cake上运行直接SQL查询,例如:$ this-> Picture-> query(“ SELECT * FROM pictures LIMIT 2;”); 或尝试与此类似的东西: ..确保您已正确链接Esl_Userresults和Esl_

  • 我有两个表,它们通过一个外键来维护它们之间的父子关系。查询如下所示。我想在使用jpa的同时使用标准版。所以有人可以帮助我使用标准版吗 表“child”的“notification\u id\u child”列是外键,并引用表“parent”的主键。

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 请问在PHP中将MySQL查询转换为CSV的最有效方法是什么? 最好避免使用临时文件,因为这会降低可移植性(需要目录路径和设置文件系统权限)。 CSV还应包括一

  • 我使用了cakephp Mysql到mongodb查询组件,即将Mysql查询转换到mongodb中,但是当查询有多个括号时代码停止工作,我还尝试将http://www.querymongo.com/site上的查询转换为相同的问题,