Có hai vấn đề lớn với mã của bạn
-
DELIMITER
không phải là một câu lệnh sql hợp lệ. Nó chỉ là một lệnh máy khách MySql. Vì vậy, chỉ cần không sử dụng nó. BTW lỗi bạn gặp phải cho bạn biết chính xác điều đó. - Bạn không thể sử dụng
DB::statement
để thực thiCREATE PROCEDURE
vì nó sử dụng câu lệnh đã chuẩn bị sẵn nguồn mã choConnection
. Bạn có thể sử dụng PDOexec()
DB::connection()->getPdo()->exec()
thay vào đó
Điều đó được cho là một sự di chuyển mẫu cho các thẻ tags
tưởng tượng bảng có thể trông như thế này
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');
}
}