Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Laravel 5.5 . में MySQL फंक्शन बनाएं

मैं अपने प्रश्न का उत्तर स्वयं देता हूं

ऐसा लगता है कि मेरे पास 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. MySQL (InnoDB) में सबसे अच्छी मिलान पंक्ति खोजें

  2. समूहीकृत MySQL डेटा से नवीनतम तिथि प्राप्त करें

  3. Mysql में टाइप चार की विदेशी कुंजी जोड़ना

  4. आदेश अभी भी सिंक से बाहर क्यों हैं; अब आप इस आदेश को नहीं चला सकते त्रुटि

  5. जेपीए में गैर-आदिम डेटा जारी रखें