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.