sql - 从 SQL 到 Laravel 查询构建器
问题描述
我有这个 SQL 查询,但不知道如何在 Laravel Query Builder 中编写它
select state_id, state_name, sum(inactifs) as inactifs, sum(actifs) as actifs,
sum(inactifs) + sum(actifs) as total
from
(
select distinct s.id as state_id, s.name as state_name, u.id as user_id,
case when uga.id is null then 1 else 0 end as inactifs,
case when uga.id is null then 0 else 1 end as actifs
from users u
inner join states s on u.state_id = s.id
left join user_group_affiliations uga on uga.user_id = u.id
and (uga.active = 1 and (uga.start_date is null or uga.start_date <= now()) and (uga.end_date is null or uga.end_date >= now()))
) quer group by state_id;
解决方案
使用 DB::raw()
$users = DB::select(DB::raw("YOUR QUERY AS IT IS"));
使用查询生成器-您可以尝试这样的事情..
DB::query()->fromSub(function($main_query){
$main_query->from('users')
->select(
DB::raw('distinct s.id as state_id, s.name as state_name, u.id as user_id,
case when uga.id is null then 1 else 0 end as inactifs,
case when uga.id is null then 0 else 1 end as actifs
')
)
->join('states as s', 'u.state_id', '=', 's.id')
->leftJoin('user_group_affiliations as uga', 'uga.user_id', '=', 'u.id')
->where('uga.active', 1)
->where(function($query){
return $query->whereNull('uga.start_date')
->orWhere('uga.start_date' '<=' date_create())
})
->where(function($query){
return $query->whereNull('uga.end_date')
->orWhere('uga.end_date' '>=' date_create())
})->groupBy('u.state_id') }, "quer")->get();
让我知道它是否有帮助..
推荐阅读
- r - 对于内部 foreach 并行不填充 R 中的数据帧
- scala - Scala中的复和类型
- sql - 作为 SQL DB 连接到 Oracle DB
- linq - 如何在复制它 UIPATH 之前检查 dt.AsEnumerable 是否为 Null
- javascript - Vue Jest - 当 v-if 为 false 时,Div 元素仍然存在
- reactjs - 刷新页面后,useEffect 中的 setState 不起作用?
- c++ - 有错误无法使用 SFML 打开输入文件 'sfml-windows-d
- ssl-certificate - 在 macOS Catalina 上为 Python3.9 安装 Certificates.command 失败
- excel - 为什么这个开关公式返回#N/A?
- datepicker - 在 Material UI 中显示可用日期的静态(只读)日历