sql >> Databasteknik >  >> RDS >> Mysql

Hur man använder "ha" med paginering i relationens kolumn i laravel 5

Uppdatera

Om du använder paginate() med din fråga kommer laravel att försöka köra följande SQL-kod för att räkna det totala antalet möjliga matchningar:

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

Som du kan se finns det ingen sådan kolumn eller alias distance i den här frågan.

Alternativ 2 i mitt ursprungliga svar kommer även det problemet att lösas.

Originalt svar

Det verkar vara ett MySQL-strikt lägesproblem. Om du använder laravel 5.3 är strikt läge aktiverat som standard. Du har två alternativ:

Alternativ 1:Inaktivera strikt läge för MySQL i config/database.php

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

Alternativ 2:Använd ett WHERE-villkor

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-lägen - ONLY_FULL_GROUP_BY



  1. Hur man lagrar Java Date till Mysql datetime med JPA

  2. Drop vs Truncate i SQL

  3. PostgreSQL konverterade fel från tidsstämpel utan tidszon till tidsstämpel med tidszon

  4. Hitta dubbletter i samma tabell i MySQL