2014-12-11 1 views
0

Laravel에서 검색을 위해 Levenshtein 거리를 사용하고 싶습니다. 나는 (app/database/migrations/levenshtain.sql로 저장) SQL 함수를 발견 Laravel migration 원시 SQL 오류

 
    DELIMITER // 
    CREATE FUNCTION `LEVENSHTEIN`(s1 VARCHAR(255) CHARACTER SET utf8, s2 VARCHAR(255) CHARACTER SET utf8) RETURNS int(11) 
     DETERMINISTIC 
    BEGIN 
     DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; 
     DECLARE s1_char CHAR CHARACTER SET utf8; 
     -- max strlen=255 for this function 
     DECLARE cv0, cv1 VARBINARY(256); 

     SET s1_len = CHAR_LENGTH(s1), 
      s2_len = CHAR_LENGTH(s2), 
      cv1 = 0x00, 
      j = 1, 
      i = 1, 
      c = 0; 

     IF (s1 = s2) THEN 
      RETURN (0); 
     ELSEIF (s1_len = 0) THEN 
      RETURN (s2_len); 
     ELSEIF (s2_len = 0) THEN 
      RETURN (s1_len); 
     END IF; 

     WHILE (j c_temp) THEN 
       SET c = c_temp; 
      END IF; 

      SET c_temp = ORD(SUBSTRING(cv1, j+1, 1)) + 1; 
      IF (c > c_temp) THEN 
       SET c = c_temp; 
      END IF; 

      SET cv0 = CONCAT(cv0, CHAR(c)), 
       j = j + 1; 
      END WHILE; 

      SET cv1 = cv0, 
       i = i + 1; 
     END WHILE; 

     RETURN (c); 
     END// 
    DELIMITER ; 

및 마이그레이션에

:

 

    [Illuminate\Database\QueryException] 
     SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in yo 
     ur SQL syntax; check the manual that corresponds to your MySQL server version f 
     or the right syntax to use near 'DELIMITER // 
     CREATE FUNCTION `LEVENSHTEIN`(s1 VARCHAR(255) CHARACTER SET utf8, ' at line 1 

그것을 : 나는 DB::statement, DB::unpreparedDB::raw을 시도했지만 Laravel 마이그레이션 오류 던져

 

    public function up() { 
     DB::statement(file_get_contents(__DIR__.'/levenshtein.sql')); 
    } 
    public function down() { 
     DB::statement('DROP FUNCTION `LEVENSHTEIN`;'); 
    } 

HeidiSQL에서 실행할 때 작동합니다. 문제가 무엇입니까?

답변