sql >> Base de Datos >  >> RDS >> Mysql

Cómo usar 'tener' con paginar en la columna de relación en laravel 5

Actualizar

Si usa paginate() con tu consulta laravel intentará ejecutar el siguiente código SQL para contar el número total de posibles coincidencias:

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

Como puede ver, no existe tal columna o alias distance en esta consulta.

Opción 2 en mi respuesta original también solucionará ese problema.

Respuesta original

Eso parece ser un problema de modo estricto de MySQL. Si usa laravel 5.3, el modo estricto está habilitado de forma predeterminada. Tienes dos opciones:

Opción 1:deshabilite el modo estricto para MySQL en config/database.php

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

Opción 2:Usar una condición 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');

Documentación:

Modos SQL del servidor:ONLY_FULL_GROUP_BY