Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL/Laravel — Dlaczego moje zapytanie zwraca pustą kolekcję?

To trochę „podchwytliwe”. Zapytanie, które wykonujesz w phpmyadmin, jest rzeczywiście poprawne. Jednak Laravel używa where() i on() inaczej.

Użyj where() z wartością i on() podczas pracy z kolumnami.

$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 , sekcja (CTRL+F):Zaawansowane sprzężenia

Aby było nieco jaśniej:

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

wyniki w:

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

Zamieszanie pojawiło się, gdy toSql() zwrócił Twoje zapytanie i założyłeś, że Laravel wie, że:

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

pierwsze dwa wiązania wiązania to kolumny. Ale where() myśli, że to tylko sznurki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego funkcja POKAŻ STATUS TABELI w innodb jest tak niewiarygodna?

  2. Określ rangę na podstawie wielu kolumn w MySQL

  3. Python:ModuleNotFoundError:Nie Nazwa modułu „mysql”

  4. Microsoft SQL DB do MySQL DB

  5. Wstawianie zbiorcze PHP