Как объединить несколько таблиц с помощью max () на Laravel - PullRequest
1 голос
/ 27 мая 2020

Я только начал изучать Laravel и застрял в этом вопросе. Как я могу сделать этот выбор с помощью QuerySelector или Eloquent на Laravel?

Это результат, которого я хочу достичь

Вот что я получил до сих пор:

$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]: Столбец не найден: 1054 Неизвестный столбец 'min (pg.tamanho)' в 'списке полей'

Цитата

1 Ответ

1 голос
/ 27 мая 2020

Привет в 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())

...