sql >> Database teknologi >  >> RDS >> Mysql

Sådan bruger du 'have' med paginering på forholdets kolonne i laravel 5

Opdater

Hvis du bruger paginate() med din forespørgsel vil laravel forsøge at udføre følgende SQL-kode for at tælle det samlede antal mulige matches:

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

Som du kan se, er der ingen sådan kolonne eller alias distance i denne forespørgsel.

Mulighed 2 i mit oprindelige svar vil det også løse det problem.

Oprindeligt svar

Det ser ud til at være et MySQL-strict-mode-problem. Hvis du bruger laravel 5.3 er streng tilstand aktiveret som standard. Du har to muligheder:

Mulighed 1:Deaktiver streng tilstand for MySQL i config/database.php

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

Mulighed 2:Brug en WHERE-betingelse

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

Dokumentation:

Server SQL Modes - ONLY_FULL_GROUP_BY



  1. MySQL Integer vs DateTime indeks

  2. Sqlite eller MySql? Hvordan beslutter man sig?

  3. Genererer du et UUID i Postgres til Insert statement?

  4. Brug af flere databaser i CodeIgniter