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

Jak używać „mieć” z paginatem w kolumnie relacji w laravelu 5

Aktualizacja

Jeśli używasz paginate() z Twoim zapytaniem laravel spróbuje wykonać następujący kod SQL, aby policzyć całkowitą liczbę możliwych dopasowań:

select count(*) as aggregate 
from `vehicles` inner join `dealers` 
  on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200

Jak widać, nie ma takiej kolumny ani aliasu distance w tym zapytaniu.

Opcja 2 w mojej oryginalnej odpowiedzi rozwiąże również ten problem.

Oryginalna odpowiedź

To wydaje się być problemem MySQL w trybie ścisłym. Jeśli używasz laravel 5.3, tryb ścisły jest domyślnie włączony. Masz dwie opcje:

Opcja 1:Wyłącz tryb ścisły dla MySQL w config/database.php

...
'mysql' => [
    ...
    'strict' => false,
    ...
],
...

Opcja 2:użyj warunku WHERE

Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
     ->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
     ->whereRaw('cos( radians(latitude) ) * cos( radians( longitude ) ) < 200');

Dokumentacja:

Tryby serwera SQL — ONLY_FULL_GROUP_BY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kłopoty z podjęciem decyzji o identyfikacji lub braku identyfikacji relacji

  2. Jak wygenerować serię średnich godzinowych w MySQL?

  3. Jak wybrać zoptymalizowane typy danych dla kolumn [specyficzne dla innodb]?

  4. PHP / PDO :SQl, aby znaleźć wiersz zawierający wartość ciągu

  5. Czy mogę ponownie użyć pola obliczeniowego w zapytaniu SELECT?