运行新创建的mirgration文件时,laravel 5迁移错误

时间:2016-05-04 04:55:55

标签: php laravel laravel-5

我刚创建了一个新的迁移文件,用于向现有表中插入新列。

文件代码是:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStatusToPhoto extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('photos', function(Blueprint $table)
        {
            $table->integer('status');
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }


}

但是当我运行php artisan migrate时,会出现一条错误消息:

  [Illuminate\Database\QueryException]
  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'permission_
  role' already exists (SQL: create table `permission_role` (`id` int unsigne
  d not null auto_increment primary key, `permission_id` int unsigned not nul
  l, `role_id` int unsigned not null, `created_at` timestamp default 0 not nu
  ll, `updated_at` timestamp default 0 not null) default character set utf8 c
  ollate utf8_unicode_ci)

任何人都知道这是什么问题?

4 个答案:

答案 0 :(得分:0)

您之前的迁移角色只是半成功运行。这意味着表permission_role已添加,但提前终止。因此,迁移永远不会标记为完成并添加到migrations表中。它尝试重新运行权限迁移文件,但由于表已存在而失败。您需要手动将旧的迁移文件添加到数据库,或者使其成功运行。

可以删除代码,或将其包装在if语句中 Is there any way to detect if a database table exists with Laravel

答案 1 :(得分:0)

确保数据库中没有实际存在的表,而down()方法应该包含能够删除该表的代码。

答案 2 :(得分:0)

在使用命令php artisan migrate之前,您必须先使用命令“"php artisan migrate:refresh"”在迁移表中记录迁移原始文件,并且还需要更正down方法。

migrate:refresh 命令将首先回滚所有数据库迁移,然后运行migrate命令。此命令有效地重新创建整个数据库:

php artisan migrate:refresh

php artisan migrate:refresh --seed

请参阅此documentation

答案 3 :(得分:0)

将这行代码放入迁移

if(!Schema::hasTable('post')){
  Schema::create('post', function (Blueprint $table) {
            $table->increments('id');
            #etc
        });
}