首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SQL转换为Eloquent或laravel中的其他数据库引擎

将SQL转换为Eloquent或laravel中的其他数据库引擎
EN

Stack Overflow用户
提问于 2018-03-12 19:41:27
回答 1查看 289关注 0票数 0

我得到了一个这样的查询:

代码语言:javascript
复制
select av.id as idd, login as start_time, logout as end_time, av.app_name as app, av.machine_name, sum(cast(ai.app_stage as unsigned)) as points, pc.name as place from application_visits as av 
LEFT JOIN application_interactions as ai 
    on ai.app_name = av.app_name
    and av.machine_name = ai.machine_name
    and ai.date between av.login and av.logout 
    and ai.type = 'points'
LEFT JOIN devices as dv
    on dv.machine_name = av.machine_name
LEFT JOIN places as pc
    on dv.place_id = pc.id
where av.user_id = '123'
group by av.id, pc.name
order by place;

我必须在两个部署服务器上使用它们,一个使用MySQL,另一个使用PostgreSQL。问题是,当我聚合'points‘列时,我必须在PG中将它们转换为INT,并在MySQL中将它们转换为unsigned (或者不加符号)。

我用过一点Eloquent,但是我想对它进行抽象,但我从来没有从SQL转换到它,或者反过来。什么是处理它的最好方法?我是否可以轻松地将其转换为Eloquent或其他查询构建器,或者是否可以检查我正在使用的SQL,然后执行两个查询中的一个?

EN

回答 1

Stack Overflow用户

发布于 2018-03-13 02:58:45

一种可能的方法是使用一个名为Orator的工具,该工具可以将原始SQL查询转换为query Builder语法。这是在您的SQL查询上运行它后的输出:

代码语言:javascript
复制
DB::select(`av.id as idd`,`login as start_time`,`logout as end_time`,`av.app_name as app`,`av.machine_name`,`pc.name as place`)
        ->addSelect(DB::raw(`sum(cast) as points`))
        ->from(`application_visits as av`)
        ->join(`application_interactions as ai`, function($join) {
            $join->on(`ai.app_name`, `=`, `av.app_name`)
                ->on(`av.machine_name`, `=`, `ai.machine_name`)
                ->on(`ai.date`, `between`, `av.login`)
                ->on(`av.logout`)
                ->on(`ai.type`, `=`, `points`);
            })
        ->join(`devices as dv`, function($join) {
            $join->on(`dv.machine_name`, `=`, `av.machine_name`);
            })
        ->join(`places as pc`, function($join) {
            $join->on(`dv.place_id`, `=`, `pc.id`);
            })
        ->where(`av.user_id`, `=`, 123)
        ->groupBy(`av.id`)
        ->groupBy(`pc.name`)
        ->orderByRaw(`place ASC`)
        ->get();

这将返回一个包含你的结果的集合,我自己还没有运行过这段代码,但是它可能是一个开始的地方,然后你可以从那里调试并迭代你的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49234377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档