Laravel Migration表已经存在,但我想添加新的而不是旧的

MD.*_*man 54 php mysql laravel

我以前创建过用户表.现在我创建了一个新的迁移来在我的模式中创建一个新的books表.当我尝试运行命令时

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

表明:

[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)
Run Code Online (Sandbox Code Playgroud)

这是我的新迁移表:

<?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');
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何摆脱错误?

amr*_*phy 55

在v5.x中,您可能仍然面临问题.因此,首先尝试手动删除相关表

php artisan tinker

然后

Schema::drop('books')

(并退出q)

现在,你可以成功php artisan migrate:rollbackphp artisan migrate.

如果反复发生这种情况,您应该检查down()迁移中的方法是否显示正确的表名.(如果您更改了表名,可能会有问题.)

  • 为我工作。非常感谢。 (2认同)
  • 这对于 v5.4 绝对对我有用。@Fawel 这是一个完全不同的问题。这是您需要修复的链接 [Laravel 5.4:指定的密钥太长错误](https://laravel-news.com/laravel-5-4-key-too-long-error)。 (2认同)
  • @UsamaMunir 很高兴听到这个消息。您始终可以使用 phpmyadmin 或 table plus 将迁移表转储到那里。或者在 IDE 中使用出色的数据库连接扩展。 (2认同)

msc*_*ett 44

你需要跑

php artisan migrate:rollback
Run Code Online (Sandbox Code Playgroud)

如果这也失败只是进入并删除你可能要做的所有表,因为你的迁移表似乎搞砸了,或者当你运行上一次回滚时你的用户表没有丢弃表.

编辑:

发生这种情况的原因是您之前运行了回滚,它在代码中有一些错误或者没有删除表.然而,这仍然会弄乱laravel迁移表,就你而言,你现在没有推送用户表的记录.用户表确实已存在,此错误是throw.

  • 是的,谢谢.但我想知道为什么搞砸了? (4认同)
  • @ MD.AtiqurRahman之所以搞砸了 - 如果我猜对了 - 是你创建了两次迁移. (2认同)

小智 26

我遇到了同样的麻烦.原因是迁移文件夹中的文件名与数据库中的迁移名称不匹配(请参阅迁移表).它们应该是一样的.

  • 这并非总是如此,因为当我使用它时laravel无论如何当你搞乱它们导致它进行更改或不更新数据库时,它会一直失败. (2认同)

Jas*_*ase 12

危险- 大多数答案都会擦除您的数据库,不建议用于生产用途。

很明显,这个问题有很多“解决方案”,但是我读过的所有这些解决方案都非常具有破坏性,并且它们都不适用于生产数据库。根据答案的数量,似乎也可能有多种原因导致此错误。

我的具体情况

我的错误是由迁移表中缺少条目引起的。我不确定它是如何发生的,但通过将其添加回我不再收到错误。

  • +1指出数据库迁移表。这是修复迁移而不弄乱实时数据的最佳方法 (3认同)

小智 9

您也可以插入 Schema::create('books', function(Blueprint $table)以下代码Schema::drop('books');


小智 9

您可以使用 php artisan migrate:fresh 删除所有表并进行迁移.希望能帮助到你

  • 这是不正确的!这将删除架构中的所有表! (6认同)
  • 这个答案应该得到更多支持。您可能熟悉 migrate:refresh 命令,它允许您回滚并重新运行所有迁移。当您需要在开发过程中重建数据库时,这会有所帮助。Laravel 5.5 通过一个名为 migrate:fresh 的新命令对此进行了改进。“refresh”和“fresh”之间的区别在于,新的 fresh 命令会跳过所有 down 方法或通过删除表进行回滚,然后运行 ​​up 方法。 (2认同)

mak*_*d19 7

编辑:(用于laravel)

刚刚在laravel的一个项目上工作时遇到过这个问题.我的表格搞砸了,需要频繁更改列.一旦桌子在那里,我就无法再跑php artisan migrate了.

为了摆脱这个问题,我已经做了以下事情 -

  1. 删除数据库中的表[每个表,包括迁移表]
  2. $ composer dump-autoload -o
  3. php artisan migrate

以前的评论,关于流明

[好吧,派对很晚(可能是一个不同于我所寻找的派对).我猛地摇头,大声尖叫,灰色头骨的优雅刚刚找到了解决方案.]

我正在使用流明开发一个安静的应用程序,我是新手.这是我使用laraval和流明的第一个项目/实验.我的依赖 -

"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"
}
Run Code Online (Sandbox Code Playgroud)

无论如何,一切都很好,直到昨天晚上,但突然phpunit开始抱怨已经存在的桌子.

Caused by
PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'items' already exists
Run Code Online (Sandbox Code Playgroud)

咄!Items表应该存在于数据库中,否则我应该如何保存项目!

无论如何问题只存在于测试类中,但奇怪的是不在浏览器中(我用chrome,firefox和postman改变标题检查).我按预期获得了数据的JSON响应.

我放弃了数据库,并有大量的重建它migrate,refresh,rollback.一切都很好,但在phpunit.

出于绝望,我删除了我的迁移文件(当然我先备份了)然后点击phpunit了终端.同样的事情一遍又一遍.

突然我记得我在phpunit.xml文件中放了一个不同的数据库名称,仅用于测试目的.我检查了那个数据库,猜猜是什么!有一张名为的桌子items.我手动删除了这个表,运行phpunit,一切都开始正常工作.

我正在记录我的经验,仅供将来参考,希望这可能有助于将来的某些人.


Nik*_*k K 6

我从没有使用迁移的人那里继承了一些真正糟糕的代码!?,所以手动将文件名粘贴到迁移中,忘记删除尾随的.php

因此,尽管文件名和迁移匹配,但导致"表存在"错误.

2018_05_07_142737_create_users_table.php - 错误2018_05_07_142737_create_users_table - 正确


Mur*_*rad 5

您可以删除所有表,但这不是一个好习惯,而是尝试使用此命令

php artisan migrate:fresh
Run Code Online (Sandbox Code Playgroud)

确保正确使用命名约定。我已经在laravel 5.7版中对此进行了测试。当您的站点在服务器上时,不要尝试使用此命令很重要,因为它会丢弃所有信息。