sql >> Databasteknik >  >> RDS >> Mysql

SQL/Laravel - Varför returnerar min fråga en tom samling?

Det är något lite "lurigt". Frågan du kör i phpmyadmin är verkligen korrekt. Laravel använder dock where() och on() annorlunda.

Använd where() med ett värde och on() när du arbetar med kolumner.

$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');

Dokument:https://laravel.com/docs/5.4/queries , avsnitt (CTRL+F):Avancerade kopplingar

För att göra det lite tydligare:

$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');

resulterar i:

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

Förvirringen kom när toSql() returnerade din fråga och du antog att Laravel vet att:

['b.stroke_id', 'b.time', '4298584']

de två första bindningsbindningarna är kolumner. Men where() tror att de bara stränger.




  1. Hur man ändrar innehåll i div, baserat på rullgardinsval

  2. Mysql - anslut till fjärrserver med IP-adress

  3. Använda en extern HD för att skriva till och lagra en mysql-databas

  4. Oracle:Sätt att aggregera sammanfoga en ogrupperad kolumn i grupperade resultat