sql >> Database >  >> RDS >> Mysql

MYSQL-procedure maken in Laravel 4-migraties

Er zijn twee grote problemen met uw code

  1. DELIMITER is geen geldige sql-instructie. Het is gewoon een MySql-clientopdracht. Dus gewoon niet gebruiken. BTW de foutmelding die je krijgt vertelt je precies dat.
  2. U kunt DB::statement niet gebruiken om CREATE PROCEDURE uit te voeren code omdat het de voorbereide instructie bron gebruikt code voor Connection . U kunt PDO exec() gebruiken DB::connection()->getPdo()->exec() in plaats daarvan

Dat gezegd hebbende, een voorbeeldmigratie voor denkbeeldige tags tabel kan er zo uitzien

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. SQL-indexering op varchar

  2. hoe kunnen we gisteren 17.00 uur tot 17.00 uur vandaag opnemen tot de datum van vandaag?

  3. Filter de rijen met alleen nummergegevens in een kolom SQL

  4. MySQL COUNT() over meerdere kolommen