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

Come usare 'avere' con paginate nella colonna della relazione in laravel 5

Aggiorna

Se usi paginate() con la tua query laravel proverà ad eseguire il seguente codice SQL per contare il numero totale di possibili corrispondenze:

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

Come puoi vedere, non esiste una tale colonna o alias distance in questa query.

Opzione 2 nella mia risposta originale risolverò anche questo problema.

Risposta originale

Sembra essere un problema in modalità MySQL. Se usi laravel 5.3 la modalità rigorosa è abilitata per impostazione predefinita. Hai due opzioni:

Opzione 1:disabilita la modalità rigorosa per MySQL in config/database.php

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

Opzione 2:usa una condizione 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');

Documentazione:

Modalità SQL del server - ONLY_FULL_GROUP_BY