PHP artisan迁移不创建新表

时间:2016-04-08 06:24:15

标签: php laravel artisan artisan-migrate

我是Laravel的新手,我跟随Laravel Documentations以及一些教程视频。但是,我在我的本地php artisan migrate中运行此CMD prompt代码,并且未在Database Table中创建phpmyadmin。在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表。我在这里错过了什么吗? 提前谢谢。

8 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:4)

修改

  

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

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

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

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

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

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

答案 2 :(得分:2)

我的Laravel设置(mac os Sierra 10.12.16)和使用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

希望这可以帮助别人,因为我花了几天时间才能最终确保设置正确:)

答案 3 :(得分:1)

你的数据库已经有了这个表,只需删除它,然后让工匠创建laravel。

答案 4 :(得分:1)

您是否有用户迁移权利?如果是这样,请在以下位置插入用户创建表:

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

答案 5 :(得分:0)

有时,如果您使用的是MAMP服务器,则可能由于数据库连接而出现此错误。这是因为端口号,通常在使用MAMP时,mysql数据库的端口号是8889,您必须在配置中进行更改并运行artisan命令,该命令才能正常运行。

答案 6 :(得分:0)

为什么要打扰?

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

答案 7 :(得分:-2)

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

host:port:user:password in plain text