Как использовать DB :: unprepared () для функции MySQL и хранимой процедуры в миграции Laravel 5.5

Я попытался использовать DB :: unprepared () в файлах миграции после прочтения старых вопросов. но это только дает мне ошибку «Обнаружено нечисловое значение» и ничего не меняется в базе данных. Однако, когда я ввожу SQL-оператор непосредственно в phpmyadmin, добавляя разделитель, он работает. Пожалуйста, предложите мне то, что мне не хватает.

DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;

SET nLast_val =  (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;

SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');

1

Решение

О, лол, это опечатка. Вы забыли сбежать с линии:

SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));

Что это должно быть:

SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));

Обновлено:

DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;

SET nLast_val =  (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;

SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');

То, что произошло здесь, вы не избежали кавычек, и PHP думает, что вы делаете 'long chunk of text' - 'long chunk of text', что, конечно, поднять ошибку A non-numeric value encountered, Это предупреждение говорит вам, что вы пытаетесь сделать математическое выражение для одной или нескольких нечисловых строк: http://php.net/manual/en/migration71.other-changes.php

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]