Ada dua masalah utama dengan kode Anda
DELIMITER
bukan pernyataan sql yang valid. Itu hanya perintah klien MySql. Jadi jangan pakai saja. BTW kesalahan yang Anda dapatkan memberi tahu Anda persis seperti itu.- Anda tidak dapat menggunakan
DB::statement
untuk menjalankanCREATE PROCEDURE
kode karena menggunakan pernyataan yang disiapkan sumber kode untukConnection
. Anda dapat menggunakan PDOexec()
DB::connection()->getPdo()->exec()
sebagai gantinya
Itu dikatakan contoh migrasi untuk tags
imajiner tabel mungkin terlihat seperti ini
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');
}
}