Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser 'avoir' avec pagination sur la colonne de la relation dans laravel 5

Mettre à jour

Si vous utilisez paginate() avec votre requête, laravel essaiera d'exécuter le code SQL suivant pour compter le nombre total de correspondances possibles :

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

Comme vous pouvez le voir, il n'y a pas une telle colonne ou alias distance dans cette requête.

Option 2 dans ma réponse d'origine résoudra également ce problème.

Réponse originale

Cela semble être un problème en mode MySQL-strict. Si vous utilisez laravel 5.3, le mode strict est activé par défaut. Vous avez deux options :

Option 1 :Désactiver le mode strict pour MySQL dans config/database.php

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

Option 2 :Utiliser une condition 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');

Documents :

Modes SQL du serveur - ONLY_FULL_GROUP_BY