Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да използвате „having“ с paginate в колоната на връзката в laravel 5

Актуализиране

Ако използвате paginate() с вашата заявка laravel ще се опита да изпълни следния SQL код, за да преброи общия брой възможни съвпадения:

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

Както можете да видите, няма такава колона или псевдоним distance в тази заявка.

Вариант 2 в първоначалния ми отговор ще коригира и този проблем.

Оригинален отговор

Това изглежда е проблем със строг режим на MySQL. Ако използвате laravel 5.3, стриктният режим е активиран по подразбиране. Имате две опции:

Опция 1:Деактивирайте строг режим за MySQL в config/database.php

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

Вариант 2:Използвайте условие 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');

Документация:

Режими на SQL на сървъра – ONLY_FULL_GROUP_BY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL regexp много бавно от подобно

  2. mysql_num_rows() очаква параметър 1 да бъде ресурс, булев, даден в

  3. Изберете най-близката числова стойност с MySQL заявка

  4. Защо Rails игнорира Rollback в (псевдо)вложена транзакция?

  5. SQL заявка, където полето НЕ съдържа $x