Laravel 5.5错误基本表或视图已存在:1050表'用户'已经存在

时间:2017-09-09 09:40:44

标签: php mysql laravel-5 laravel-5.5

规格:

  • 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

问题

它创建用户表并给出错误但不创建列表表

17 个答案:

答案 0 :(得分:10)

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

  1. 在控制台中我写了php artisan tinker

  2. 然后,再次在控制台中Schema::drop('users')

  3. 最后php artisan migrate这一切都奏效了。

答案 1 :(得分:7)

我自己解决了我的问题 通过更改我的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');
    }
}

答案 2 :(得分:2)

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

  1. php artisan make:migration create_tableName_table --create = tableName。

  2. php artisan migrate。

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

  4. 将新表格创建为1。

  5. 光洁度。好的。

答案 3 :(得分:1)

首先从数据库中删除这些列。并运行composer update。然后最后运行php artisan migrate它会解决你的问题。最简单的解决方案。

答案 4 :(得分:1)

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

  

php artisan migration:fresh

答案 5 :(得分:1)

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

ChildViewModel_A

答案 6 :(得分:1)

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'),它将检查数据库中是否已存在表。 如果您不想放桌子,那是个好主意。

答案 7 :(得分:1)

如果表已存在于数据库中,则可以跳过迁移表,方法是添加以下代码:

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();

    });
}

答案 8 :(得分:0)

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

php artisan migrate:reset

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

php artisan migrate 

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

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

答案 9 :(得分:0)

有时我遇到和你一样的问题,在我检查之后是因为有时我懒得输入并复制粘贴 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',

希望能帮到你

答案 10 :(得分:0)

更改Mysql引擎设置

config/database.php中,将您的mysql引擎设置更改为: 'engine' => 'innodb row_format=dynamic'

注意:这适用于Laravel 5.2.14 +

答案 11 :(得分:0)

通过命令创建迁移 PHP工匠make:migration create_category_table 然后在数据库/迁移中设置必要的字段和数据库,然后运行此命令 照片工匠移民-假装 它将显示sql语句,复制类别的sql语句并将其粘贴到sql中的数据库中,然后单击运行,您的迁移就在那里了,无需删除用户表

答案 12 :(得分:0)

使用php artisan migrate时通常会发生迁移错误,并且您的迁移存在错误。

在Laravel中,有一些方法可以扭转已经发生的事情 尤其是迁移到更强大的数据库(例如MySql)时, 例如。

一种逆转已采取步骤的方法

php artisan migrate

是要运行

php artisan migrate: rollback

它会自动撤消上一次执行的迁移 您还可以使用step参数委派要撤消的步骤数。

数字表示将撤消多少步

php artisan migrate: rollback --step=1

答案 13 :(得分:0)

同意Nitesh的回答,但我认为这不是每次无缘无故掉桌子的最佳实践。我们还可以根据docs对条件Schema :: hasTable('users')使用简单的“ if”检查。因此我们可以将其用作:

<?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()
    {
        if(!Schema::hasTable('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');
    }
}

如果您已经有一个表并需要进行一些修改,那么您也可以在else语句中执行任何操作。

答案 14 :(得分:0)

解决方案:

  1. 进入数据库-> phpmyadmin (如果您位于 localhost
  2. 删除您创建的数据库上的所有内容
  3. 在cmd上运行php artisan migrate

答案 15 :(得分:0)

此链接上提到了两种可能的解决方案:

https://www.codespeaker.com/laravel-framework/solutions-for-common-errors-on-artisan-commands/

首先是回滚

php artisan migration:rollback

第二个是删除表。

答案 16 :(得分:0)

我有不同的解决方案,我删除迁移表,这里是我的解决方案

<?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('migration');
    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');
}
}