Das ist etwas "tricky". Die Abfrage, die Sie in phpmyadmin ausführen, ist in der Tat korrekt. Laravel verwendet jedoch where()
und on()
anders.
Verwenden Sie where()
mit einem Wert und on()
beim Arbeiten mit Spalten.
$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');
Dokumente:https://laravel.com/docs/5.4/queries , Abschnitt (STRG+F):Erweiterte Verknüpfungen
Um es etwas klarer zu machen:
$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');
ergibt:
JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING
Die Verwirrung kam, als toSql()
hat Ihre Abfrage zurückgegeben und Sie haben angenommen, dass Laravel
weiß das:
['b.stroke_id', 'b.time', '4298584']
Die ersten beiden Bind-Bindungen sind Spalten. Aber where()
denkt, dass sie nur Saiten.