You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将指定MySQL查询转换为Laravel Eloquent ORM代码

将MySQL查询转换为Laravel Eloquent ORM实现

原始MySQL查询

SELECT
    team_name,
    (CASE WHEN `assignment` = 'Appeal/Recon/Claim Review' THEN `done` ELSE 0 END) AS 'Appeal', 
    (CASE WHEN `assignment` = 'IDR' THEN `done` ELSE 0 END) AS 'IDR'
FROM
    operation_assignments  
WHERE
    serial = 6 
GROUP BY
    team_name

现有查询构建器实现

$collections = DB::table('operation_assignments')
    ->select(
        'team_name', 
        DB::raw("CASE WHEN assignment = 'Appeal/Recon/Claim Review' THEN done ELSE 0 END AS Appeal"),
        DB::raw("CASE WHEN assignment = 'IDR' THEN done ELSE 0 END AS IDR")
    )
    ->where('serial', 6)
    ->groupBy('team_name')
    ->get();

Eloquent ORM实现方案

1. 先创建对应模型类

确保项目中存在与operation_assignments表对应的Eloquent模型,示例如下:

// app/Models/OperationAssignment.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class OperationAssignment extends Model
{
    // 若表名遵循Laravel蛇形命名规范(模型类名驼峰转蛇形+s),此属性可省略
    protected $table = 'operation_assignments';
    // 根据实际字段调整可批量赋值的字段列表
    protected $fillable = ['team_name', 'assignment', 'done', 'serial'];
}

2. 基于模型执行查询

直接通过模型替代DB::table()调用,逻辑与查询构建器完全一致:

use App\Models\OperationAssignment;

$collections = OperationAssignment::select(
        'team_name', 
        \DB::raw("CASE WHEN assignment = 'Appeal/Recon/Claim Review' THEN done ELSE 0 END AS Appeal"),
        \DB::raw("CASE WHEN assignment = 'IDR' THEN done ELSE 0 END AS IDR")
    )
    ->where('serial', 6)
    ->groupBy('team_name')
    ->get();

可选优化:使用模型作用域复用查询

如果该查询会被多次调用,可在模型中定义作用域简化代码:

// 在OperationAssignment模型中添加作用域方法
public function scopeWithAssignmentStats($query)
{
    return $query->select(
        'team_name',
        \DB::raw("CASE WHEN assignment = 'Appeal/Recon/Claim Review' THEN done ELSE 0 END AS Appeal"),
        \DB::raw("CASE WHEN assignment = 'IDR' THEN done ELSE 0 END AS IDR")
    );
}

调用时更简洁:

$collections = OperationAssignment::withAssignmentStats()
    ->where('serial', 6)
    ->groupBy('team_name')
    ->get();

内容的提问来源于stack exchange,提问作者Woaraka Been Mahbub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:17:43