Mysql
 sql >> база данни >  >> RDS >> Mysql

Създайте MySQL функция в Laravel 5.5

Аз сам отговарям на въпроса си

Изглежда, че нямах достъп да пусна MySQL функция...

Затова замених DROP FUNCTION IF EXISTS `ST_Distance_Sphere` чрез проверка на версията на 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);

}

Малко е грозно, но изглежда работи...

РЕДАКТИРАНЕ

Всъщност той ще работи само при първия път, когато се изпълни. Изглежда, че тази функция може да запише функцията mysql в базата данни на mysql. Следващите пъти ще имате грешка като „функцията Mysql вече съществува“. Просто трябва да коментирате блока по-горе.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Присъединяване на липсващи дати от таблицата на календара

  2. MySQL:множество таблици или една таблица с много колони?

  3. Преобразуване на оператор за сливане в MYSQL с помощта на дублиран ключ

  4. странно кодиране на символи на съхранените данни, старият скрипт им показва добре, новият не го прави

  5. MYSQL ПОРЪЧКА ПО СЛУЧАЙ Проблем