13

我是新手Laravel,我正在关注Laravel Documentations一些教程视频。但是,我php artisan migrate在本地运行此代码,CMD prompt而不是Database Tablephpmyadmin. 还有其他几个与此相关的类似主题,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没有创建新表。我在这里错过了什么吗?提前致谢。

4

9 回答 9

14

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

于 2016-04-08T06:27:23.393 回答
5

编辑

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

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

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

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

php artisan migrate --force强制运行迁移。

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

于 2016-04-08T06:42:05.320 回答
2

我的 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

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

于 2017-11-02T13:48:49.757 回答
1

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

于 2016-04-08T06:46:13.397 回答
1

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

if(!Schema::hasTable('users')) ...
于 2016-04-08T07:00:06.677 回答
0

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

于 2019-01-18T11:33:17.273 回答
0

何苦?

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

于 2019-07-03T10:33:58.650 回答
0

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

于 2021-10-31T18:12:39.807 回答
-2

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

php artisan migrate.
于 2018-02-11T02:29:52.683 回答