Il y a deux problèmes majeurs avec votre code
DELIMITERn'est pas une instruction sql valide. C'est juste une commande client MySql. Alors ne l'utilisez pas. BTW l'erreur que vous obtenez vous dit exactement cela.- Vous ne pouvez pas utiliser
DB::statementpour exécuterCREATE PROCEDUREcode car il utilise l'instruction préparée source code pourConnection. Vous pouvez utiliser PDOexec()DB::connection()->getPdo()->exec()à la place
Cela étant dit, un exemple de migration pour les tags imaginaires le tableau pourrait ressembler à ceci
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');
}
}