Mysql
 sql >> Base de données >  >> RDS >> Mysql

Création d'une procédure MYSQL dans les migrations Laravel 4

Il y a deux problèmes majeurs avec votre code

  1. 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.
  2. Vous ne pouvez pas utiliser DB::statement pour exécuter CREATE PROCEDURE code car il utilise l'instruction préparée source code pour Connection . Vous pouvez utiliser PDO exec() 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');
    }
}