【问题标题】:PHP artisan migrate not creating new tablePHP工匠迁移不创建新表
【发布时间】:2016-07-29 07:44:45
【问题描述】:

我是Laravel 的新手,我正在关注Laravel Documentations 以及一些教程视频。但是,我在我的本地 CMD prompt 中运行此 php artisan migrate 代码,它没有在 phpmyadmin 中创建 Database Table。 stackoverflow 中还有其他几个与此相关的类似主题,但没有一个能解决我的问题。请不要标记此重复项。

好的,事情是这样的。我运行这段代码

php artisan make:migration create_student_table --create=student

新文件在迁移文件夹中创建为2016_04_08_061507_create_student_table.php

然后在那个文件中我运行这个code

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

    class CreateStudentTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('student', function (Blueprint $table) {
                $table->increments('id');
                $table->timestamps();
                $table->string('name', 20); 
                $table->string('email', 255);
            });
        }

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

然后在 cmd 我运行 php artisan migrate 但它没有创建 student 表。而是显示此消息

[PDOException] SQLSTATE[42S01]:基表或视图已存在: 1050 表“用户”已经存在

我几天前使用与上述类似的方法创建了users 表。但是没有创建新的student 表。我在这里错过了什么吗? 提前致谢。

【问题讨论】:

  • 迁移就像您的项目数据库的时间线。 Laravel 检查已经运行了哪些迁移,只运行那些尚未运行的迁移。该时间线保存到migrations 表中。所以你的问题是你没有migrations 表记录,但有users 表。如果您只是在这里学习,我建议您删除数据库中的所有表,然后运行php artisan migrate。
  • hmm thnx 的信息,好的,删除所有表现在可以工作。如果我将来仍然存在同样的问题怎么办。?当我做真正的项目时。那里的解决方案是什么?
  • 如果你不碰migrations table,你就不会坚持。 Laravel 会知道已经运行了哪些迁移,并且不会再次尝试执行它们。
  • 使用标志 :fresh 将重写表

标签: php laravel laravel-artisan artisan-migrate


【解决方案1】:

这意味着 Laravel 正在尝试首先运行 users 表迁移。如果您正在开发中并且不需要保留数据,您可以删除users 表,然后运行php artisan migrate

【讨论】:

  • 我没有删除users 表,而是删除了users_migrations,它起作用了。任何原因是怎么发生的?因为在不久的将来,我可能不得不手动删除迁移文件夹中的文件来创建新的数据库表。
  • 最好从数据库/迁移文件夹中移出已经运行的迁移。请记住在运行迁移后将其放回以供将来使用。 @PrabinParajuli
  • 通过 MOVE OUT 你的意思是创建备份到其他文件夹或 DELETE ?如果我删除,我不需要这些文件吗?
  • 您将需要所有这些文件进行部署..所以不要删除它..运行迁移后将其移到原来的位置。
  • 感谢信息.. 为我工作.. 不幸的是我删除了以前的迁移文件,但我现在不需要它。再次感谢:)
【解决方案2】:

编辑

从 database\migrations 文件夹中移出已经运行的迁移, 在运行新的迁移文件之前。运行新迁移后 回到以前的迁移中。

这意味着您已经运行了一次php artisan migrate,并且该表已经存在于数据库中。如果工匠在撒谎,有时你需要做一个composer dump-autoload。

因此您需要在编辑和运行 php artisan migrate 之前回滚最后一次更改。要回滚,您可以使用 php artisan migrate:rollback

此外,如果您想删除所有更改,您可以运行 php artisan migrate:reset 。

有php artisan migrate --force强制执行迁移。

完成所有这些步骤后,如果无法运行迁移,如果是开发环境,请再次删除数据库创建数据库并运行php artisan migrate。

【讨论】:

    【解决方案3】:

    我的 Laravel 设置 (mac os Sierra 10.12.16) 和使用带有 atom 的 MAMP 时遇到了类似的问题,直到我执行后续步骤后才找到明确的解决方案。

    在设置我的本地环境时,我发现使用以下步骤可以防止以后出现迁移问题,

    IN AppServiceProvider.php  add the following code:
    
    use Illuminate\Support\Facades\Schema;
    
    public function boot()
    {
        //
        Schema::defaultStringLength(191);
    }
    
    then in database.php:
    
    'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
    
    THEN FINALLY IN .env:
    
    DB_CONNECTION=mysql
    DB_HOST=localhost
    DB_PORT=
    DB_DATABASE=hackable
    DB_USERNAME=root
    DB_PASSWORD=root
    

    希望这对某人有所帮助,因为我花了几天时间才最终正确设置:)

    【讨论】:

      【解决方案4】:

      你的数据库已经有了这个表,把它放下,让 laravel 由 artisan 创建。

      【讨论】:

        【解决方案5】:

        您是否拥有用户迁移权限?如果是这样,请将您的用户创建表插入到:

        if(!Schema::hasTable('users')) ...
        

        【讨论】:

        • 也不错.. thnx
        【解决方案6】:

        有时,如果您使用 MAMP 服务器,您可能会因为数据库连接而收到此错误。这是因为端口号,通常在使用 MAMP 时,mysql 数据库的端口号是 8889,您必须在配置中更改它并运行您的 artisan 命令,它肯定会工作。

        【讨论】:

          【解决方案7】:

          何必呢?

          您可以使用php artisan migrate:fresh 这将忽略当前用户表并重新创建表。

          【讨论】:

            【解决方案8】:

            当我遇到这个问题时,我犯了一个错误 $table-> id(); 但应该是 $table->bigIncrements('id');

            【讨论】:

              【解决方案9】:

              这对我有用:从数据库中删除所有表并运行

              php artisan migrate.
              

              【讨论】:

              • 欢迎来到 StackOverflow。只有代码的答案往往会被社区标记为“低质量”并被删除。请阅读帮助部分,看看什么才是好的答案。
              猜你喜欢
              • 2015-11-24
              • 1970-01-01
              • 2020-03-22
              • 2018-12-02
              • 1970-01-01
              • 2016-05-17
              • 2018-09-26
              • 1970-01-01
              • 2023-03-10
              相关资源
              最近更新 更多