sql >> Database >  >> RDS >> Mysql

Haversine en Laravel

Dus je hebt niet alle opgeblazen gevoel in die kern nodig, in plaats daarvan kun je de volgende formules gebruiken:

public function get_offers_near($latitude, $longitude, $radius = 1){

    $offers = Offer::select('offers.*')
        ->selectRaw('( 3959 * acos( cos( radians(?) ) *
                           cos( radians( offer_lat ) )
                           * cos( radians( offer_long ) - radians(?)
                           ) + sin( radians(?) ) *
                           sin( radians( offer_lat ) ) )
                         ) AS distance', [$latitude, $longitude, $latitude])
        ->havingRaw("distance < ?", [$radius])
        ->get();

    return $offers;
}

Hierbij wordt ervan uitgegaan dat u de latitude . passeert en longitude van uw gebruiker. Als u niet wilt dat de straal 1 is, kunt u het derde argument doorgeven en een aangepaste straal opgeven.

En natuurlijk gaan we ervan uit dat dit voor een model van Offer . is . Wijzig waar nodig uw naamgevingsconventie.



  1. COUNT() versus COUNT_BIG() in SQL Server:wat is het verschil?

  2. Salesforce SOQL van SQL Server

  3. MySQL, Controleer of een kolom bestaat in een tabel met SQL

  4. MySQL cartesiaans product tussen twee SELECT-instructies