工匠'什么都不回滚'当已经创建了一个表时

时间:2018-04-23 14:26:24

标签: laravel artisan

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

  

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

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

  

无法回滚。

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

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

如果出现此问题,如何使用工匠删除表格,我将告诉您如何首先避免此问题。最后我只是使用phpmyadmin删除了表格。

我在Laravel上观看了一个教程,为了避免错误,我看到了这个:

  

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

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

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

答案 1 :(得分:1)

在我的情况下,在Schema::defaultStringLength(191);方法中定义了boot()之后没有解决。因为数据库中的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   auto_increment主键为空,name varchar(255)不为空,   email varchar(255)不为null,password varchar(255)不为null,   remember_token varchar(100)为空,created_at时间戳为空,   updated_at时间戳为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');
}

答案 2 :(得分:1)

解决方案:

>> php artisan migrate:fresh

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

答案 3 :(得分:0)

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

解决了!