Hay dos problemas principales con su código
DELIMITER
no es una instrucción sql válida. Es solo un comando de cliente MySql. Así que simplemente no lo uses. Por cierto el error que obtienes te dice exactamente eso.- No puede usar
DB::statement
para ejecutarCREATE PROCEDURE
código porque usa declaración preparada fuente código paraConnection
. Puede usar PDOexec()
DB::connection()->getPdo()->exec()
en cambio
Dicho esto, una migración de muestra para tags
imaginarias la tabla podría verse así
class CreateTagsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tags', function($table){
$table->increments('id');
$table->string('name')->unique();
});
$sql = <<<SQL
DROP PROCEDURE IF EXISTS sp_insert_tag;
CREATE PROCEDURE sp_insert_tag(IN _name VARCHAR(32))
BEGIN
INSERT INTO `tags`(`name`) VALUES(_name);
END
SQL;
DB::connection()->getPdo()->exec($sql);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$sql = "DROP PROCEDURE IF EXISTS sp_insert_tag";
DB::connection()->getPdo()->exec($sql);
Schema::drop('tags');
}
}