sql >> Databáze >  >> RDS >> Mysql

SQL/Laravel – Proč můj dotaz vrací prázdnou kolekci?

To je něco trochu "ošidného". Dotaz, který provádíte v phpmyadmin, je skutečně správný. Laravel však používá where() a on() jinak.

Použijte where() s hodnotou a on() při práci se sloupci.

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

Dokumenty:https://laravel.com/docs/5.4/queries , sekce (CTRL+F):Pokročilá spojení

Aby to bylo trochu jasnější:

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

výsledkem je:

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

Zmatek nastal, když toSql() vrátil váš dotaz a vy jste předpokládali, že Laravel ví to:

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

první dvě vazby vazby jsou sloupce. Ale where() si myslí, že jen struny.




  1. MySQL:aktualizujte pole, pouze pokud je splněna podmínka

  2. postgres fulltextové vyhledávání jako operátor

  3. Django resetoval automatické zvýšení pole pk/id pro produkci

  4. Změnit typ pole varchar na celé číslo:nelze automaticky přetypovat na typ celé číslo