Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL/Laravel - Защо моята заявка връща празна колекция?

Това е нещо малко "сложно". Заявката, която изпълнявате в phpmyadmin, наистина е правилна. Laravel обаче използва where() и on() различно.

Използвайте where() със стойност и on() при работа с колони.

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

Документи:https://laravel.com/docs/5.4/queries , раздел (CTRL+F):Разширени съединявания

За да стане малко по-ясно:

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

води до:

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

Объркването дойде, когато toSql() върна вашата заявка и вие предположихте, че Laravel знае, че:

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

първите две свързващи връзки са колони. Но where() смята, че те са просто струни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо тази проста MySQL заявка не връща реда?

  2. Как да сравните низове за един интервал

  3. Django MySQL група по ден с часова зона

  4. Създател на заявки на Laravel за рекурсивни резултати? напр. идентификатор, идентификатор на_родител

  5. Django южна миграция - Добавяне на FULLTEXT индекси