尝试迁移时,Laravel错误

时间:2017-06-26 12:06:35

标签: php laravel laravel-5 laravel-5.2

我想在我的数据库表用户中添加另一列。我创建了一个名为Modify_users_table的新迁移,其中包含添加列的代码。源代码没有任何问题,因为我之前使用过它,但它给出了一个错误,即表角色有问题吗?我怎么解决这个问题?这是错误和与错误相关的代码 enter image description here

以下是迁移Roles

 public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->string('role_name')->length(55)->unique();
        $table->increments('id');
        $table->timestamps();
    });
}

4 个答案:

答案 0 :(得分:2)

你有很多问题。您的主要问题是您没有向表中添加列。您的脚本正在尝试创建一个新表,如下所示:

Schema::create('roles', function (Blueprint $table) {

您说您正在尝试向users表添加一列,但您甚至无法使用该用户的表:而是创建一个名为roles的表,该表已存在。最简单的解决方案是执行Dhaval建议的操作:放弃添加的迁移,更新创建用户表,核对并重新开始的迁移。

"对"答案是创建一个新的迁移并添加指令以将列添加到users表以及删除它的说明。然后,您可以进行简单的迁移,而不是对数据库进行核对。这看起来像这样:

public function up()
{
    Schema::table('users', function ( Blueprint $table ) {
        $table->string('last_name')->after( 'first_name' )->default( '' );
    });
}

public function down()
{
    Schema::table( 'users', function ( Blueprint $table ) {
        $table->dropColumn( ['last_name'] );
    });
}

答案 1 :(得分:0)

你需要运行

php artisan migrate:rollback

如果还失败,只需进入并删除您可能必须执行的所有表,因为您的迁移表似乎搞砸了,或者当您运行上一次回滚时您的角色表没有删除表。

或者您可以使用migrate:reset命令回滚所有应用程序的迁移:

php artisan migrate:reset

答案 2 :(得分:0)

我遇到了同样的问题,并且尝试了类似的方法,它非常适合我。我的Laravel版本是5.5。

public function up()
{
    Schema::connection('mysql2')->create('images', function (Blueprint $table) {
        $table->increments('id');             
        $table->string('name');                      
        $table->string('image');            
        $table->timestamps();
    });
}

public function down()
{
    Schema::connection('mysql2')->dropIfExists('images');
}

我必须在项目中连接,一个是 mysql ,另一个是 mysql2 ,因为我的项目用于具有多个连接的数据库。

所以我的解决方案是尝试在函数中指定与数据库的连接。

如果未在函数中指定默认连接,则默认连接为 mysql ,下面给出示例。希望这会有所帮助!

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');                
            $table->string('name');
            $table->string('email',60)->unique();
            $table->string('password');                
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }

因此,当您使用php artisan进行迁移时,它不会显示错误,

答案 3 :(得分:-1)

从数据库中删除表(我第一次遇到此问题时手动完成)

并在create_users_table迁移中进行此更改

$table->string('email', 60)->unique();

这对我有用..

希望这也有助于你