sql >> Database >  >> RDS >> Mysql

SQL/Laravel - Waarom retourneert mijn query een lege verzameling?

Dat is een beetje "lastig". De query die u uitvoert in phpmyadmin is inderdaad correct. Laravel gebruikt echter where() en on() anders.

Gebruik where() met een waarde en on() bij het werken met kolommen.

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

Documenten:https://laravel.com/docs/5.4/queries , sectie (CTRL+F):Geavanceerde joins

Om het wat duidelijker te maken:

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

resulteert in:

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

De verwarring ontstond toen toSql() heeft uw vraag teruggestuurd en u nam aan dat Laravel weet dat:

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

de eerste twee bindingen zijn kolommen. Maar where() denkt dat ze gewoon snaren.




  1. De PostgreSQL-correlatiefunctie gebruiken

  2. Waarom in PostgreSQL enum type array null-waarden toegestaan?

  3. Hoe te testen of Ci met succes gegevens heeft ingevoegd?

  4. Gebruik DATABASEPROPERTYEX() om database-instellingen in SQL Server te retourneren