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

如何将该SQL语句转换为Laravel 5.5的Query Builder写法

把原生SQL转换为Laravel Query Builder写法

没问题,我来帮你把这条原生SQL转换成Laravel Query Builder的写法,这样既符合Laravel的编码规范,也能方便你利用框架的各种特性~

首先先拆解下你的原生SQL逻辑:通过关联categorias、objetos、detalle_donativo_realizados和donativo_realizados四张表,筛选出指定donativo_realizados.id对应的分类、物品、捐赠详情等信息。

下面是对应的Query Builder实现:

use Illuminate\Support\Facades\DB;

// 替换成你实际的ID值
$targetId = 1;

$donationDetails = DB::table('categorias as c')
    // 关联categorias和objetos表
    ->join('objetos as o', 'c.id', '=', 'o.categoria_id')
    // 关联objetos和detalle_donativo_realizados表
    ->join('detalle_donativo_realizados as ddr', 'o.id', '=', 'ddr.objeto_id')
    // 关联detalle_donativo_realizados和donativo_realizados表
    ->join('donativo_realizados as dr', 'ddr.donativoRealizado_id', '=', 'dr.id')
    // 指定要查询的字段及别名
    ->select(
        'c.nombreCategoria as categoria',
        'o.nombre as articulo',
        'ddr.descripcion',
        'ddr.talla_id',
        'ddr.cantidad'
    )
    // 过滤指定的donativo_realizados ID
    ->where('dr.id', $targetId)
    // 获取结果集,如果只需要单条可以用first()
    ->get();

进阶:用Eloquent关联简化写法

如果你已经为这几张表创建了对应的Eloquent模型(比如Categoria、Objeto、DetalleDonativoRealizado、DonativoRealizado),并且定义了正确的关联关系,还可以用更简洁的Eloquent写法:

假设模型关联如下:

  • Categoria模型:public function objetos() { return $this->hasMany(Objeto::class); }
  • Objeto模型:public function detalleDonativos() { return $this->hasMany(DetalleDonativoRealizado::class, 'objeto_id'); }
  • DetalleDonativoRealizado模型:public function donativoRealizado() { return $this->belongsTo(DonativoRealizado::class, 'donativoRealizado_id'); }

那么可以这样查询:

use App\Models\Categoria;

$targetId = 1;

$donationDetails = Categoria::select(
        'categorias.nombreCategoria as categoria',
        'objetos.nombre as articulo',
        'detalle_donativo_realizados.descripcion',
        'detalle_donativo_realizados.talla_id',
        'detalle_donativo_realizados.cantidad'
    )
    ->join('objetos', 'categorias.id', '=', 'objetos.categoria_id')
    ->join('detalle_donativo_realizados', 'objetos.id', '=', 'detalle_donativo_realizados.objeto_id')
    ->whereHas('objetos.detalleDonativos', function ($query) use ($targetId) {
        $query->where('donativoRealizado_id', $targetId);
    })
    ->get();

这样的写法更贴合Laravel的ORM设计,也更易于维护~

内容的提问来源于stack exchange,提问作者Alonso Lambent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:41