猿问

如何在 Laravel 上使用 max() 连接多个表

我刚开始学习 Laravel,但我被困在了这个问题上。我怎么能在 Laravel 上使用 QuerySelector 或 Eloquent 做这个选择?

这就是我想要达到的结果

这就是我到目前为止的结果:

$produtos = \DB::table('produtos AS p')
   ->leftJoin('produtos_fotos AS pf','pf.produto_id','=','p.id')
   ->leftJoin('produtos_grade AS pg','pg.produto_id','=','p.id')
     ->select('p.id','p.referencia','p.descricao','p.preco','p.ratings',
                                 'p.categorias_produtos as categoria','p.promocao','p.genero', 'p.cabedal as materialCabedal','p.solado as materialSolado', 'p.altura_salto AS alturaSalto','pf.url','pf.nome_foto','min(pg.tamanho) as tam_min', 'max(pg.tamanho) as tam_max')
    ->where(['p.fornecedor_id' => $idFornecedor])
    ->groupBy('p.id')
    ->get())

但我得到一个错误:

Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'min(pg.tamanho)' in 'field list'

块引用


扬帆大鱼
浏览 164回答 1
1回答

泛舟湖上清波郎朗

如果您想在查询中使用原始表达式,请在 laravel 中打招呼。你需要使用DB::raw 方法在您的情况下,更改为以下将起作用。$produtos = \DB::table('produtos AS p')     ->leftJoin('produtos_fotos AS pf','pf.produto_id','=','p.id')     ->leftJoin('produtos_grade AS pg','pg.produto_id','=','p.id')     ->select(          'p.id',          'p.referencia',          'p.descricao',          'p.preco',          'p.ratings',          'p.categorias_produtos as categoria',           'p.promocao',           'p.genero',           'p.cabedal as materialCabedal',           'p.solado as materialSolado',           'p.altura_salto AS alturaSalto',           'pf.url',            'pf.nome_foto',                DB::raw('min(pg.tamanho) as tam_min'),                 DB::raw('max(pg.tamanho) as tam_max')      )      ->where(['p.fornecedor_id' => $idFornecedor])      ->groupBy('p.id')      ->get())
随时随地看视频慕课网APP
我要回答