Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz funkcję MySQL w Laravel 5.5

Odpowiadam na własne pytanie

Wygląda na to, że nie miałem dostępu do usunięcia funkcji MySQL...

Więc zastąpiłem DROP FUNCTION IF EXISTS `ST_Distance_Sphere` przez sprawdzenie wersji MySQL:

$mysql_version_check = DB::select(DB::raw('SHOW VARIABLES LIKE "version";'));
$mysql_version = $mysql_version_check[0]->Value;
if (substr($mysql_version,2, 1) < '7' AND substr($mysql_version,4, 1) < '6') {
    $sql = '
        CREATE FUNCTION `ST_Distance_Sphere` (point1 POINT, point2 POINT)

            RETURNS FLOAT
            no sql deterministic
            BEGIN
                declare R INTEGER DEFAULT 6371000;
                declare `φ1` float;
                declare `φ2` float;
                declare `Δφ` float;
                declare `Δλ` float;
                declare a float;
                declare c float;
                set `φ1` = radians(y(point1));
                set `φ2` = radians(y(point2));
                set `Δφ` = radians(y(point2) - y(point1));
                set `Δλ` = radians(x(point2) - x(point1));

                set a = sin(`Δφ` / 2) * sin(`Δφ` / 2) + cos(`φ1`) * cos(`φ2`) * sin(`Δλ` / 2) * sin(`Δλ` / 2);
                set c = 2 * atan2(sqrt(a), sqrt(1-a));

                return R * c;
            END;
    ';

    DB::unprepared($sql);

}

To trochę brzydkie, ale wygląda na to, że działa...

EDYTUJ

Właściwie zadziała tylko za pierwszym razem, gdy zostanie wykonany. Wygląda na to, że ta funkcja może zapisać funkcję mysql w bazie danych mysql. Następnym razem pojawi się błąd, taki jak „Funkcja Mysql już istnieje”. Musisz tylko skomentować powyższy blok.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL:usunąć wszystkie rekordy z tabeli z wyjątkiem ostatniego N?

  2. MYSQL — Co to jest klucz podstawowy?

  3. Przygotowane instrukcje PHP PDO i powiązanie wartości dają błąd nieprawidłowego numeru parametru

  4. Wystąpił błąd JNI, sprawdź instalację i spróbuj ponownie w Eclipse x86 Windows 8.1

  5. Czy mogę zmienić ft_min_word_len na współdzielonym hostingu?