Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo hàm MySQL trong Laravel 5.5

Tôi trả lời câu hỏi của chính mình

Có vẻ như tôi không có quyền truy cập để bỏ một hàm MySQL ...

Vì vậy, tôi đã thay thế DROP FUNCTION IF EXISTS `ST_Distance_Sphere` bằng cách kiểm tra phiên bản 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);

}

Nó hơi xấu, nhưng nó có vẻ hoạt động ...

CHỈNH SỬA

Trên thực tế, nó sẽ chỉ hoạt động trong lần đầu tiên nó được thực thi. Có vẻ như hàm này có thể lưu hàm mysql vào cơ sở dữ liệu mysql. Bạn sẽ gặp lỗi trong những lần tiếp theo như "Hàm Mysql đã tồn tại". Bạn chỉ cần nhận xét khối ở trên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết nối với bộ chứa mysql do docker-soạn từ chối quyền truy cập nhưng docker chạy cùng một hình ảnh thì không

  2. Sử dụng khung thực thể với MySQL DB và trình thiết kế mô hình không nhận các tham số proc được lưu trữ

  3. Lỗi MySQL 1215:Không thể thêm ràng buộc khóa ngoại

  4. Làm cách nào để thêm chỉ mục vào bảng MySQL?

  5. Thực thi nhiều truy vấn xóa sql trong mysql cho php