【问题标题】:Artisan 'Nothing to rollback' when there is a table already created当已经创建了一个表时,Artisan 'Nothing to rollback'
【发布时间】:2018-10-03 15:33:13
【问题描述】:

我想使用 php artisan migrate 进行迁移,但出现错误:

SQLSTATE[42S01]:基表或视图已存在:1050 表“用户”已存在

所以我很自然地想使用php artisan migrate:rollback 删除我的表,但我得到了:

没有什么可以回滚的。

什么鬼?它刚才说users 表已经创建。我该怎么办?我可以用 phpmyadmin 删除表,但我想学习如何使用 artisan。

感谢您的帮助。

【问题讨论】:

  • 如果你改用php artisan migrate:reset呢?
  • 您只能回滚上次执行的迁移。是否有任何可以回滚的最后迁移? php artisan migrate:status 的输出是什么?您是否在数据库中的 migrations 表中看到任何迁移?如果是这样,这些迁移是您所期望的吗?
  • 抱歉,Stack Overflow 维护了几分钟,我尝试自己管理。我所做的是使用 phpmyadmin 删除所有表(甚至是迁移表),然后我修复了导致我必须首先创建php artisan migrate:rollback 的原因,我在 AppServiceProvider 中添加了Schema::defaultStringLength(191);。现在看来效果不错。
  • 写出答案作为答案。
  • @Troyer 完成了。

标签: laravel laravel-artisan


【解决方案1】:

php artisan db:wipe

如果您使用 Laravel 6.x,这是一种删除所有表、它们的类型和视图的快速方法

完整说明:

$ php artisan db:wipe {--database=} {--drop-views} {--drop-types} {--force}

  • database - 要使用的数据库连接
  • drop-views - 删除所有表和视图
  • drop-types - 删除所有表和类型(仅限 Postgres)
  • force - 在生产中强制操作运行

【讨论】:

    【解决方案2】:
    1. 在 AppServiceProvider.php 中添加use Illuminate\Support\Facades\Schema;,在boot() 函数中添加Schema::defaultStringLength(191);
    2. 运行php artisan migrate:fresh
    3. 再次运行php artisan migrate

    解决了!

    【讨论】:

      【解决方案3】:

      解决方案:

      >> php artisan migrate:fresh
      

      它将删除所有表并重新创建所有迁移。

      【讨论】:

      • 如果我们只是想删除表,你的回答很好,但我们也必须纠正Artisan创建的表在我们使用@987654323时没有出现在迁移表中的问题@。我不知道这是否是 Artisan 的错误,但这是核心问题。
      • 我不确定你是否也关心这个问题。 stackoverflow.com/a/54265587/5276297
      【解决方案4】:

      在我的情况下,在 boot() 方法中定义 Schema::defaultStringLength(191); 后没有解决。因为数据库中的migrations 表是空的。 所以解决方案是打开作曲家的修补匠

      $ php artisan tinker
      >>> Schema::drop('users')
      >>> Schema::drop('password_resets')
      >>> Schema::drop('orders')
      >>> exit
      php artisan migrate
      

      这是执行上述命令的结果

      nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate
      

      在 Connection.php 第 647 行: SQLSTATE [42S01]:基表或视图已存在:1050 表“用户” 已经存在(SQL:创建表usersid int unsigned not null auto_increment 主键,name varchar(255) 不为 null, email varchar(255) 不为空,password varchar(255) 不为空, remember_token varchar(100) 空,created_at 时间戳空, updated_attimestamp null) 默认字符集 utf8mb4 整理 utf8mb4_unicode_ci)

      在 Connection.php 第 449 行: SQLSTATE [42S01]:基表或视图已存在:1050 表“用户” 已经存在了

      nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate:rollback
      Nothing to rollback.
      nishanth@localhost:~/Desktop/html/hutch$ php artisan tinker
      Psy Shell v0.8.17 (PHP 7.1.20-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
      >>> Schema::drop('users')
      => null
      >>> Schema::drop('password_resets')
      => null
      >>> Schema::drop('orders')
      => null
      >>> exit
      Exit:  Goodbye.
      nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate
      Migrating: 2014_10_12_000000_create_users_table
      Migrated:  2014_10_12_000000_create_users_table
      Migrating: 2014_10_12_100000_create_password_resets_table
      Migrated:  2014_10_12_100000_create_password_resets_table
      Migrating: 2018_08_18_071213_create_orders_table
      Migrated:  2018_08_18_071213_create_orders_table
      nishanth@localhost:~/Desktop/html/hutch$ 
      

      如果方法down() 不存在,还要定义它。
      否则会显示

      SQLSTATE[42S02]:未找到基表或视图:1051 未知表 'XYZ.ABC'(SQL:删除表 ABC

      /**
        * Reverse the migrations.
        *
        * @return void
        */
      public function down()
      {
          Schema::dropIfExists('ABC');
      }
      

      【讨论】:

      • 当心,Tkinter 和 Tinker 不是一回事 XD 不过你说得对,因为我的 migrations 表是空的。
      【解决方案5】:

      没有回答出现此问题时如何使用 artisan 删除表,我将首先告诉您如何避免此问题。最终我只是使用 phpmyadmin 删除了表。

      我看了一个关于 Laravel 的教程,为了避免错误,我看到了:

      SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节

      我必须在AppServiceProvider.php 中添加use Illuminate\Support\Facades\Schema;,在boot() 函数中添加Schema::defaultStringLength(191);。但是我认为我可以在defaultStringLength(...) 中输入任何数字,所以我输入了 255,并且迁移不起作用。

      按照教程中的说明做,写Schema::defaultStringLength(191);。然后,您可以使用php artisan migrate 执行迁移,它应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        • 2023-03-29
        • 1970-01-01
        • 2020-05-16
        • 2020-06-20
        • 2021-12-01
        相关资源
        最近更新 更多