Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo thủ tục MYSQL trong Laravel 4 Migrations

Có hai vấn đề lớn với mã của bạn

  1. 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 đó.
  2. Bạn không thể sử dụng DB::statement để thực thi CREATE PROCEDURE vì nó sử dụng câu lệnh đã chuẩn bị sẵn nguồn mã cho Connection . Bạn có thể sử dụng PDO exec() 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');
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COUNT có nhanh hơn kéo các bản ghi và đếm trong mã không?

  2. Django manytomany truy vấn hành vi kỳ lạ

  3. PHP PDO truy vấn nhiều lựa chọn liên tục loại bỏ bộ hàng cuối cùng

  4. Làm cách nào để đặt giá trị mặc định của MySQL DateTime (không phải TIMESTAMP) thành NOW () hoặc Current_DateTIme?

  5. PHP:Gọi thủ tục lưu trữ MySQL với cả tham số INPUT VÀ OUTPUT (KHÔNG VÀO)