Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL/Laravel - Por que minha consulta retorna uma coleção vazia?


Isso é algo um pouco "complicado". A consulta que você está executando no phpmyadmin está, de fato, correta. No entanto, o Laravel usa where() e on() diferente.

Use where() com um valor e on() ao trabalhar com colunas.
$times = Time::join(\DB::raw('(SELECT `ath_id`, `stroke_id`, MIN(time) AS time FROM times GROUP BY ath_id, stroke_id) b'), function($join) {
                 $join->on('times.ath_id', '=', 'b.ath_id')
                      ->on('times.stroke_id', '=', 'b.stroke_id')
                      ->on('times.time', '=', 'b.time');
             })
             ->where('times.ath_id', '=', $id)
             ->orderBy('times.stroke_id', 'ASC')
             ->orderBy('times.date', 'DESC');

Documentos:https://laravel.com/docs/5.4/queries , seção (CTRL+F):junções avançadas

Para deixar um pouco mais claro:
$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');

resulta em:
JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING

A confusão veio quando toSql() retornou sua consulta e você assumiu que Laravel Sabe disso:
['b.stroke_id', 'b.time', '4298584']

as duas primeiras ligações de ligação são colunas. Mas where() pensa que eles apenas cordas.