如何在 Laravel 上使用 max() 连接多个表
How to join multiple tables using max() on Laravel
我刚开始学习 Laravel,但我被这个问题困住了。我怎么能 select 使用 QuerySelector 或 Eloquent on Laravel 来做到这一点?
That is the result i want to achieve
这就是我到目前为止的结果:
$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'
Blockquote
如果您想在查询中使用原始表达式,请在 laravel 中打招呼。你需要使用 DB::raw method
在您的情况下,更改为以下内容即可。
$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())
我刚开始学习 Laravel,但我被这个问题困住了。我怎么能 select 使用 QuerySelector 或 Eloquent on Laravel 来做到这一点?
That is the result i want to achieve
这就是我到目前为止的结果:
$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'
Blockquote
如果您想在查询中使用原始表达式,请在 laravel 中打招呼。你需要使用 DB::raw method
在您的情况下,更改为以下内容即可。
$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())