sql >> Database >  >> RDS >> Mysql

Hoe 'hebben' te gebruiken met pagina in de kolom van de relatie in laravel 5

Bijwerken

Als u paginate() . gebruikt met uw zoekopdracht zal laravel proberen de volgende SQL-code uit te voeren om het totale aantal mogelijke overeenkomsten te tellen:

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

Zoals je kunt zien, is er geen dergelijke kolom of alias distance in deze zoekopdracht.

Optie 2 in mijn oorspronkelijke antwoord zal dat probleem ook oplossen.

Oorspronkelijk antwoord

Dat lijkt een MySQL-strict-mode-probleem te zijn. Als u laravel 5.3 gebruikt, is de strikte modus standaard ingeschakeld. Je hebt twee opties:

Optie 1:Schakel de strikte modus voor MySQL uit in config/database.php

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

Optie 2:gebruik een WHERE-voorwaarde

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

Documentatie:

Server SQL-modi - ALLEEN_FULL_GROUP_BY



  1. Hoe de gekoppelde server voor SQL Server 2008 te maken waar we de database van 2000 en 2005 hebben?

  2. Een deel van een string in MySQL vervangen

  3. Foreign key voor meerdere tabellen en kolommen?

  4. MySQL:waarom de weergavebreedte specificeren zonder zerofill te gebruiken?