Il y a deux problèmes majeurs avec votre code
DELIMITER
n'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::statement
pour exécuterCREATE PROCEDURE
code 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');
}
}