Laravel 5.5错误基础表或视图已经存在:1050表'users'已经存在。

15

规格:

  • Laravel 版本:5.5.3
  • PHP 版本:7.1
  • 数据库驱动程序及版本:MariaDB 10.1.26

描述:

C:/Users/user/code/blog/>php artisan migrate

[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL: create table users (id int unsigned not null aut
o_increment primary key, name varchar(255) not null, email varchar(255) not null, password varchar(255) not null, remember_token varchar
(100) null, created_at timestamp null, updated_at timestamp null) default character set utf8mb4 collate utf8mb4_unicode_ci engine = InnoDB R
OW_FORMAT=DYNAMIC)

[PDOException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists

重现步骤:

 C:/Users/user/code/blog/>laravel new website

 C:/Users/user/code/blog/>php artisan make:migration create_lists_table --create=lists

 C:/Users/user/code/blog/>php artisan migrate

问题

它创建用户表并产生错误,但未创建列表表。


2
清空你的数据库,然后再尝试。 - apokryfos
@apokryfos,我已经删除了所有的表和数据库,但是它仍然显示相同的错误。 - Nitesh Kumar Niranjan
你能把那个作为你问题的答案发布吗?这可能会帮助未来遇到类似问题的其他人。 - apokryfos
在迁移文件中检查是否存在重复条目。也许您已经复制了用户模式并忘记编辑它。如果是这样,Laravel 将会看到您正在尝试两次输入“users”模式。 - user2314339
22个回答

28

我通过更改我的 create_users_table.php 文件来自己解决了问题。

<?php

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

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::dropIfExists('users');
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

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

它也可以工作,但 Laravel 有一个更简单的形式来解决这个问题。 - Lucas Coelho
Schema::dropIfExists('users'); // 在Scheme::create之前添加新行 - Polymath

21

以下是我解决相同问题所采取的步骤:

  1. 在控制台中输入 php artisan tinker

  2. 接着,在控制台中输入 Schema::drop('users')

  3. 最后,运行 php artisan migrate,一切都可以正常工作。


19

解决这个问题的简单方法是运行以下命令:

php artisan migrate:fresh


2
@Florin 它还会再次创建表格。 - Rahul Rahatal
5
请注意,这将从零开始创建所有内容,您将丢失数据。 - Aadesh Dhakal
2
@Rajat:这就是为什么我们永远不应该盲目地使用在本网站或其他网站上找到的代码,而是应该发现代码背后的思想,并基于所获得的知识创建自己的代码。否则,你将“自担风险”地使用代码。最好发表一个友善的评论提及你的问题,对回答进行负面评价(如果适用),然后继续前进。 - Hovercraft Full Of Eels

8

如果数据库中已经存在表格,您可以通过添加以下代码来跳过迁移表格的步骤:

public function up()
{
    if(Schema::hasTable('users')) return;       //add this line to your database file

    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();

    });
}

6

以下命令解决了我的问题:

 1. php artisan tinker
 2. Schema::drop('your_table_name')
 3. php artisan migrate

3
if (!Schema::hasTable('users')) {
            Schema::create('users', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name');
                $table->string('email')->unique();
                $table->timestamp('email_verified_at')->nullable();
                $table->string('password');
                $table->rememberToken();
                $table->timestamps();
            });
        }

使用 !Schema::hasTable('users') ,它将检查数据库中是否已经存在表。 如果您不想删除表,那么这是一个好主意。


2

以下是我解决同样问题的步骤:

  1. 运行命令:php artisan make:migration create_tableName_table --create=tableName。

  2. 运行命令:php artisan migrate。

  3. 如果出现错误,您可以删除migration中的所有文件和数据库中的所有表。

  4. 创建新表作为第一步。

  5. 完成。好了。


1
步骤 1:
php artisan migrate:reset

步骤 2: 使用 PHPmyadmin(或类似工具)进入您的数据库,并删除所有剩余的表格 - 包括迁移表。
步骤 3:
php artisan migrate

1

有时我会遇到和你一样的问题,经过检查发现是因为有时我太懒了,没有从create_user_table.php中输入或复制粘贴代码。

Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

我忘记从这段代码中更改表名

Schema::create('users',

转换为

Schema::create('what_ever_you_want_to_name_it',

我希望这可以帮助到您。

0

你可以使用此命令重置所有内容

php artisan migrate:reset

然后你就可以运行这个命令。

php artisan migrate 

记住重置将删除您的用户表。 请不要使用手动方法删除表格或对数据库进行任何操作。 Laravel允许我们通过使用命令来完成所有操作,这就是它的美妙之处。 如果您想了解有关使用Laravel迁移的详细信息,请查看此链接。

https://laramatic.com/how-to-use-migrations-in-laravel-code-example/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接