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

Vytvořte funkci MySQL v Laravel 5.5

Odpovídám na svou vlastní otázku

Zdá se, že jsem neměl přístup k odstranění funkce MySQL...

Takže jsem nahradil DROP FUNCTION IF EXISTS `ST_Distance_Sphere` kontrolou verze 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);

}

Je to trochu ošklivé, ale zdá se, že to funguje...

UPRAVIT

Ve skutečnosti to bude fungovat pouze při prvním spuštění. Zdá se, že tato funkce by mohla uložit funkci mysql do databáze mysql. Příště se vám zobrazí chyba jako „Funkce Mysql již existuje“. Musíte pouze okomentovat výše uvedený blok.




  1. Jak nastavit časové pásmo xampp mysql a Apache?

  2. Funkce MAX() v PostgreSQL

  3. Nainstalujte WordPress s Nginx, MariaDB 10 a PHP 7 na Debian 9

  4. Jak se liší PostgreSQL od MySQL?