我之前创建了用户表。现在,我创建了一个新的迁移以在我的架构中创建一个新的 books 表。当我尝试运行命令时
php artisan migrate
表明:
[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' alre
ady exists (SQL: create table `users` (`id` int unsigned not null auto_incr
ement primary key, `username` varchar(255) not null, `email` varchar(255) n
ot null, `password` varchar(255) not null, `created_at` timestamp default 0
not null, `updated_at` timestamp default 0 not null) default character set
utf8 collate utf8_unicode_ci)
这是我的新迁移表:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBooksTable extends Migration {
public function up()
{
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
}
public function down()
{
Schema::drop('books');
}
}
我怎样才能摆脱错误?
在 v5.x 中,您可能仍然会遇到问题。因此,尝试首先使用手动删除相关表
php artisan tinker
然后
Schema::drop('books')
(并使用 q
退出)
现在,您可以成功php artisan migrate:rollback
和php artisan migrate
。
如果这种情况反复发生,您应该检查迁移中的 down()
方法是否显示了正确的表名。 (如果您更改了表名,可能会遇到问题。)
你需要跑
php artisan migrate:rollback
如果这也失败了,只需进入并删除您可能必须做的所有表,因为您的迁移表似乎被搞砸了,或者当您运行先前的回滚时您的用户表没有删除该表。
编辑:
发生这种情况的原因是您之前运行了回滚,并且代码中有一些错误或没有删除表。然而,这仍然会弄乱 laravel 迁移表,并且就它而言,您现在没有将用户表向上推的记录。但是,用户表确实已经存在,并且会抛出此错误。
我有同样的麻烦。原因是迁移文件夹中的文件名与数据库中的迁移名称不匹配(请参阅迁移表)。他们应该是一样的。
migrate
是空的,但仍然只有表存在。所以我需要手动删除它。谢谢
您可以使用 php artisan migrate:fresh
删除所有表然后迁移。希望能帮助到你
Base table or view already exists: 1050 Table 'users' already exists
。似乎第二个数据库没有被重置。
您也可以在 Schema::create('books', function(Blueprint $table)
之前插入以下代码 Schema::drop('books');
Schema::dropIfExists('books');
编辑:(对于 laravel)
刚刚在 laravel 中进行项目时遇到了这个问题。我的表搞砸了,需要经常更改列。一旦表格在那里,我就无法再运行 php artisan migrate
了。
我已完成以下操作以解决此问题-
删除数据库中的表【每一张,包括迁移表】 $ composer dump-autoload -o php artisan migrate
上一条评论,关于流明
[嗯,派对很晚了(可能和我要找的派对不同)。我撞到头,大声尖叫,在灰色骷髅的恩典下找到了解决办法。]
我正在使用流明开发一个宁静的应用程序,我是新手。这是我第一个使用 laraval 和 lumen 的项目/实验。我的依赖-
"require": {
"php": ">=5.6.4",
"laravel/lumen-framework": "5.4.*",
"vlucas/phpdotenv": "~2.2",
"barryvdh/laravel-cors": "^0.8.6",
"league/fractal": "^0.13.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"phpunit/phpunit": "~5.0",
"mockery/mockery": "~0.9.4"
}
无论如何,直到昨天晚上一切都很好,但突然 phpunit
开始抱怨已经存在的表。
Caused by
PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'items' already exists
呸! Items
表应该存在于数据库中,否则我应该如何保存项目!
无论如何,问题只存在于测试类中,但奇怪的是浏览器中没有(我检查了 chrome、firefox 和 postman 更改标题)。我按预期收到了带有数据的 JSON 响应。
我删除了数据库并使用大量 migrate
、refresh
、rollback
重新创建它。一切都很好,但在 phpunit
中。
出于绝望,我删除了我的迁移文件(当然我先备份了),然后在终端中点击 phpunit
。同样的事情又来了。
突然我想起我在 phpunit.xml
文件中放了一个不同的数据库名称,仅用于测试目的。我检查了那个数据库,你猜怎么着!有一个名为 items
的表。我手动删除了这个表,运行 phpunit
,一切都开始正常工作了。
我正在记录我的经验以供将来参考,并希望这可能对将来的某人有所帮助。
我从没有使用迁移的人那里继承了一些真正的错误代码!?,所以手动将文件名粘贴到迁移中,忘记删除尾随的 .php
因此,尽管文件名和迁移匹配,但仍导致“表存在”错误。
2018_05_07_142737_create_users_table.php - 错误 2018_05_07_142737_create_users_table - 正确
您可以删除所有表,但这不是一个好习惯,请尝试使用此命令
php artisan migrate:fresh
确保正确使用命名约定。我已经在 laravel 5.7 版本中对此进行了测试。当您的站点在服务器上时,不要尝试此命令很重要,因为它会删除所有信息。
在搞乱外键约束后我遇到了类似的问题。我的一张表(笔记)消失了,而一张表(任务)即使在 MySQL 中删除后也不断返回(任务),阻止我运行:php artisan migrate/refresh/reset
,这产生了上述 42s01 异常。
我解决这个问题的方法是 ssh 进入 vagrant,然后进入 MySQL (vagrant ssh, mysql -u homestead -p secret
),然后:DROP DATABASE homestead; Then CREATE DATABASE homestead; Then exit mysql and run:
php artisan migrate`。
显然,这个解决方案不适用于不使用 vagrant/homestead 的人。不以任何方式声称这是一个正确的工作流程,但它解决了我的问题,看起来很像上面的问题。
你删除数据库中的所有表格,然后
https://i.stack.imgur.com/xchYR.png
php artisan migrate:refresh
编辑您的迁移文件
php artisan migrate:rollback
再次php artisan migrate
^_^
做你的桌子!
危险 - 这些答案中的大多数都会擦除您的数据库,不建议用于生产用途。
很明显,这个问题有很多“解决方案”,但我阅读的所有这些解决方案都是非常具有破坏性的解决方案,它们都不适用于生产数据库。根据解决方案的数量,这个错误似乎也可能有几个原因。
我的错误是由于迁移表中缺少条目引起的。我不确定它到底是怎么发生的,但是通过重新添加它,我不再收到错误。
我想我的回答会更有帮助。我也遇到了这个错误。然后我删除了特定的迁移文件并尝试通过 php artisan 重新创建。
但是在 1 或 2 天前我正在观看有关迁移的 laracast 视频时得到这一点之前,我正在考虑回滚并迁移特定的表。出于某种原因,我删除了特定的迁移文件并尝试重新创建,但这样做我得到了:
[ErrorException] 包括(C:\wamp64\www\laraveldeneme\vendor\composer/../../database/migrations/2017_01_09_082715_create_articles_table.php):无法打开流:没有这样的文件或目录
当我检查该文件时,我在 autoload_classmap.php 文件中的数组顶部看到以下行:
'CreateArticlesTable'=>$baseDir.'/database/migrations/2017_01_09_083946_create_articles_table.php',
尽管回滚或删除迁移文件,与迁移文件相关的记录仍保留在 composer autoload_classmap.php 文件中。
为了解决这个问题,我从不记得的地方找到了下面的 composer 命令。
composer dump-autoload
当我运行此代码时,与我删除的迁移文件相关的行消失了。然后我跑了:
php artisan make:migration create_articles_table --create=articles
最后我重新创建了同名的迁移文件
转到 phpmyadmin 并删除您为 laravel 创建的数据库,然后再次创建它,然后转到 cmd(如果使用 Windows)根项目并键入 php artisan migrate
您始终可以在创建表之前检查表是否存在。
if(!Schema::hasTable('books')){
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
}
php artisan migrate:rollback
检查解决方案:Laravel Official Solution
如迁移 guide 中所述,要解决此问题,您只需编辑 app\Providers\AppServiceProvider.php 文件并在引导方法中设置默认字符串长度:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
在上述命令之后,您需要手动删除所有剩余的表,然后运行命令:
php artisan migrate:fresh
对于仍在寻找答案的任何人,如果迁移卡在尝试运行已运行的迁移之一(因此,“表已存在”问题),只需执行以下操作:
打开导致问题的表的 PHP 文件并注释掉“up()”函数中的所有代码。
再次运行“php artisan migrate”。导致问题的文件/表将使用它的空函数进行处理。
然后迁移将继续进行到新的等待迁移。完成后,取消注释之前注释掉的行(可选但建议不要混淆其他开发人员)
回滚后检查您的表,确保删除。
如果出现问题,请从 phpmyadmin 之类的数据库应用程序中手动删除表(我正在使用 sequel pro for mac)。
更正迁移中的 down 方法。
注意:先回滚然后迁移。不要使用 migrate:refresh 来注意错误出现在哪里。
之后,您可以使用新数据库进行测试。来检测问题出在哪里。
也尝试阅读此question
将此添加到 AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot() {
Schema::defaultStringLength(191);
}
删除所有表数据库 更新文件夹 database/migrations/ 中的两个文件:2014_10_12_000000_create_users_table.php、2014_10_12_100000_create_password_resets_table.php
2014_10_12_100000_create_password_resets_table.php
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email');
$table->string('token');
$table->timestamp('created_at')->nullable();
});
2014_10_12_000000_create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
我通过删除 sequel-pro 中的“用户”表解决了您的问题(我的用户表中没有数据),然后您可以运行 php artisan migrate
这是之前和之后的屏幕截图
在我删除用户表用户之前
https://i.stack.imgur.com/O0YLa.png
https://i.stack.imgur.com/z6PmY.png
在 phpmyadmin 中手动删除所有表。转到数据库/迁移中的每个迁移文件。查找并删除这 2 个代码:a) ->index()(在 2014_10_12_100000_create_password_resets_table.php 第 17 行找到) b) ->unique()(在 2014_10_12_000000_create_users_table.php 在第 19 行找到)运行 php artisan migrate Done。
我认为这是因为最新的 laravel 课程(2018 年 2 月 12 日)已经删除了 ->index()
和 ->unique()
的功能
如果我们必须删除一个未能创建的表,这很烦人。所以我在创建新表之前使用 dropIfExists('table_name') 函数删除表如果有表
Schema::dropIfExists('books');
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
首先删除数据库中的用户表。然后转到命令 propmt 并键入
php artisan migrate
全部设置。我认为这个答案有帮助。
在 laravel 5.4 中,如果您遇到此问题。 Check this link
-或者-
转到 app/Providers/AppServiceProvider.php 中的此页面并在下面添加代码
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
我也有这个问题,刚刚在 Youtube Video 上看到了这个答案。不确定它是否理想,但这是我见过的最好的。
通过给 Schema 一个长度,似乎是 providers 目录的 AppServiceProvider.php
文件。在这种情况下 191
。像魔术一样工作。Screenshot。然后他跑了:php artisan migrate:fresh
。希望这有效。
首先检查数据库中的迁移表,并确保项目中数据库文件夹中的迁移文件等于该表数据。有时,如果您手动创建迁移文件,则在 Composer 中运行迁移命令时会出现此错误。
解决方法:Laravel 迁移表已经存在... ||它也适用于 Laravel 5.8
app\Providers\AppServiceProvider.php 文件
并在 boot 方法中设置默认字符串长度:
public function boot()
{
Schema::defaultStringLength(191);
}
并打开
配置\数据库.php
'charset' =>'utf8mb4',
'collation' =>'utf8mb4_unicode_ci',
并将其更改为
'charset' =>'utf8',
'collation' =>'utf8_unicode_ci',
保存所有文件并转到命令提示符
php artisan migrate
答案很简单:
首先备份文件夹 bootstrap/cache。
然后从 bootstrap/cache 文件夹中删除所有文件。
现在运行:
php artisan migrate
从字面上看,创建数据库需要几秒钟。
导出您当前的数据库以防它包含敏感数据。
检查您的迁移并消除其中的所有错误方法。
删除数据库并重新创建数据库。
php artisan migrate
然后您可以返回数据库中先前的数据。
我也面临同样的问题,我遵循相同的过程,但我的问题没有解决,所以我尝试了另一件事。我从数据库中删除了表并使用了头文件
use Illuminate\Support\Facades\Schema;
并增加 boot
方法中的默认字符串长度以添加:
Schema::defaultStringLength(191);
然后再次php artisan migrate
。问题已解决,所有表都在数据库中创建。
不定期副业成功案例分享