Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar 'have' com paginate na coluna do relacionamento em laravel 5

Atualizar


Se você usar paginate() com sua consulta, o laravel tentará executar o seguinte código SQL para contar o número total de correspondências possíveis:
select count(*) as aggregate 
from `vehicles` inner join `dealers` 
  on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200

Como você pode ver, não existe tal coluna ou alias distance nesta consulta.

Opção 2 na minha resposta original também corrigirá esse problema.

Resposta original


Isso parece ser um problema de modo estrito do MySQL. Se você usar laravel 5.3, o modo estrito é habilitado por padrão. Você tem duas opções:

Opção 1:desative o modo estrito para MySQL em config/database.php
...
'mysql' => [
    ...
    'strict' => false,
    ...
],
...

Opção 2:use uma condição 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');

Documentação:

Modos SQL do servidor - ONLY_FULL_GROUP_BY