sql >> Databáze >  >> RDS >> Mysql

Jak používat 'mít' se stránkováním ve sloupci vztahu v laravel 5

Aktualizovat

Pokud použijete paginate() s vaším dotazem se laravel pokusí provést následující kód SQL, aby spočítal celkový počet možných shod:

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

Jak vidíte, žádný takový sloupec nebo alias distance neexistuje v tomto dotazu.

Možnost 2 v mé původní odpovědi tento problém také vyřeší.

Původní odpověď

Zdá se, že jde o problém v přísném režimu MySQL. Pokud používáte laravel 5.3, přísný režim je ve výchozím nastavení povolen. Máte dvě možnosti:

Možnost 1:Zakažte přísný režim pro MySQL v config/database.php

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

Možnost 2:Použijte podmínku 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');

Dokumentace:

Režimy SQL serveru – ONLY_FULL_GROUP_BY



  1. 7 Kroková příručka k používání Accessu s Azure Multi-Factor Authentication

  2. Filtrování podle možností OFFSET-FETCH ve výběrovém dotazu - SQL Server / Výukový program TSQL, část 118

  3. Připojení k databázi PHP a MYSQL a vytvoření tabulky pouze jednou

  4. Funkce SQRT() v Oracle