Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Buat fungsi MySQL di Laravel 5.5

Saya menjawab pertanyaan saya sendiri

Sepertinya saya tidak memiliki akses untuk menghapus fungsi MySQL...

Jadi saya mengganti DROP FUNCTION IF EXISTS `ST_Distance_Sphere` dengan pemeriksaan versi 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);

}

Agak jelek, tapi tampaknya berhasil...

EDIT

Sebenarnya, ini hanya akan berfungsi saat pertama kali dijalankan. Tampaknya fungsi ini dapat menyimpan fungsi mysql ke database mysql. Anda akan mengalami kesalahan di waktu berikutnya seperti "Fungsi MySQL sudah ada". Anda hanya perlu mengomentari blok di atas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan migrasi di Django 2; AttributeError:objek 'str' tidak memiliki atribut 'decode'

  2. Tipe data apa yang digunakan untuk bidang kata sandi hash dan berapa panjangnya?

  3. Pilih baris MYSQL tetapi baris menjadi kolom dan kolom menjadi baris

  4. Tanggal di antara 2 tanggal lain, tanpa memperhitungkan tahun

  5. Menghitung perbedaan nilai antara dua record di Eloquent