sql >> Database teknologi >  >> RDS >> Mysql

Opret MySQL-funktion i Laravel 5.5

Jeg besvarer mit eget spørgsmål

Det ser ud til, at jeg ikke havde adgang til at slippe en MySQL-funktion...

Så jeg erstattede DROP FUNCTION IF EXISTS `ST_Distance_Sphere` ved en MySQL-versionskontrol:

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

}

Det er lidt grimt, men det ser ud til at virke...

REDIGER

Faktisk vil det kun virke første gang, det udføres. Det ser ud til, at denne funktion kunne gemme mysql-funktionen i mysql-databasen. Du vil have en fejl de næste gange som "Mysql-funktionen eksisterer allerede". Du skal bare kommentere blokken ovenfor.




  1. AES _Kryptering i Mysql, Dekryptering i C#.Net

  2. MYSQL:Procedure med if-sætning

  3. Implementering af MariaDB Sharding med Spider ved hjælp af ClusterControl

  4. PHP/SQL-database, der forespørger om god praksis og sikkerhed