Z Twoim kodem są dwa główne problemy
DELIMITER
nie jest poprawną instrukcją sql. To tylko polecenie klienta MySql. Więc po prostu go nie używaj. Przy okazji błąd, który otrzymasz, mówi dokładnie to.- Nie możesz użyć
DB::statement
wykonaćCREATE PROCEDURE
kod, ponieważ używa przygotowanej instrukcji źródło kod dlaConnection
. Możesz użyć PDOexec()
DB::connection()->getPdo()->exec()
zamiast tego
Biorąc to pod uwagę, przykładowa migracja wyimaginowanych tags
tabela może wyglądać tak
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');
}
}