gpt4 book ai didi

mysql - 在 Laravel 中将 SQL 转换为 Eloquent 或其他数据库引擎

转载 作者:行者123 更新时间:2023-11-29 17:52:02 26 4
gpt4 key购买 nike

我有一个这样的查询:

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。问题是,当我聚合“点”列时,我必须将它们在 PG 中转换为 INT,并在 MySQL 中转换为无符号(或保留它)。

我使用过一点 Eloquent,但我想抽象它,但我从未从 SQL 转换为它,反之亦然。解决这个问题的最佳方法是什么?我可以轻松地将其转换为 Eloquent 或其他查询生成器,或者我可以检查我正在使用哪个 SQL,然后执行两个查询之一?

最佳答案

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

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();

这将返回包含您的结果的集合,但是我自己没有运行此代码,但它可能是一个起点,然后您可以从那里进行调试并迭代您的解决方案。

关于mysql - 在 Laravel 中将 SQL 转换为 Eloquent 或其他数据库引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49234377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com