Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie man 'having' mit paginate in der Beziehungsspalte in Laravel 5 verwendet

Aktualisieren

Wenn Sie paginate() verwenden mit Ihrer Abfrage wird Laravel versuchen, den folgenden SQL-Code auszuführen, um die Gesamtzahl möglicher Übereinstimmungen zu zählen:

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

Wie Sie sehen können, gibt es keine solche Spalte oder diesen Alias ​​distance in dieser Abfrage.

Option 2 in meiner ursprünglichen Antwort wird dieses Problem auch beheben.

Originalantwort

Das scheint ein Problem im strengen MySQL-Modus zu sein. Wenn Sie Laravel 5.3 verwenden, ist der strikte Modus standardmäßig aktiviert. Sie haben zwei Möglichkeiten:

Option 1:Deaktivieren Sie den strikten Modus für MySQL in config/database.php

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

Option 2:Verwenden Sie eine WHERE-Bedingung

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');

Dokumentation:

Server-SQL-Modi - ONLY_FULL_GROUP_BY