Laravel Создать хранимую процедуру с помощью кода - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь создать процедуру с помощью кода laravel, встраивая операторы в строку и затем выполняя ее с помощью оператора или неподготовленного, но получаю ошибки; : 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис рядом с 'DELIMITER $$ CREATE DEFINER = root @ localhost PROCEDURE

Вот мой код;

        $query  =' DROP procedure IF EXISTS BULKINSERT;';
        $query .=' DELIMITER $$';
        $query .=' CREATE DEFINER=#root#@#localhost# PROCEDURE #BULKINSERT#()';
        $query .=' BEGIN ';
        $query .=' DECLARE company_id,department_id BIGINT;';
        for($comp = 0;$comp < count($companies); $comp++)
        {
            $query .=' SET company_id=null;';
            $query .=' SELECT id INTO company_id FROM COMPANIES WHERE Name=`'.$companies[$comp].'` ;';
            $query .=' IF company_id IS NULL THEN INSERT INTO companies(Name) VALUES(`'.$companies[$comp].'`) ;';
            $query .=' SET company_id=LAST_INSERT_ID() ; END IF ;';
            if(!empty($departments[$comp]))
            {
                for($dept = 0;$dept < count($departments[$comp]); $dept++)
                {
                    $query .=' SET department_id=null;';
                    $query .=' SELECT id INTO department_id FROM DEPARTMENTS WHERE Name=`'.$departments[$comp][$dept].'` ;';
                    $query .=' IF department_id IS NULL THEN INSERT INTO DEPARTMENTS(Name,company_id) VALUES(`'.$departments[$comp][$dept].'`,company_id) ; ';
                    $query .=' SET department_id=LAST_INSERT_ID() ; END IF ;';
                    if(!empty($users[$comp][$dept]))
                    {
                     for($user = 0;$user < count($users[$comp][$dept]); $user++)
                     {
                        $query .=' INSERT INTO User_Details(Name,department_id) VALUES(`'.$users[$comp][$dept][$user].'`,department_id) ;';
                     }
                    }
               }
           }
        }
        $query .=' END $$';
        $query .=' DELIMITER ;';
        $query=str_replace(['`'], ["\""], $query);
        $query=str_replace(['#'], ["`"], $query);
        $query .=' Call BULKINSERT();';
       // echo'<pre>';print_r($query);exit;
        //DB::statement($query);
        //$results = DB::select( DB::raw($query) );
        //DB::unprepared("DROP procedure IF EXISTS BULKINSERT;");
        DB::unprepared($query);
        //DB::unprepared(" Call BULKINSERT();");

Если я попытаюсь запустить скрипт, созданный с помощью '$ query' в phpmyadmin, он будет работать правильно, но с ошибками из-за неподготовленного оператора. Подскажите, пожалуйста, как это сделать или можно ли через Laravel код?

Заранее спасибо,
Amar

...