Laravel Column 已经存在:1060 Duplicate column name

Posted

技术标签:

【中文标题】Laravel Column 已经存在:1060 Duplicate column name【英文标题】:Laravel Column already exists: 1060 Duplicate column name 【发布时间】:2020-02-27 05:19:50 【问题描述】:

我正在尝试进行此迁移,但它给了我这个错误

enter code here
<?php

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

class CreateUsersTable extends Migration


public function up()


    //CREANDO UN MODELO PARA LOS ROLES DEL USUARIO
    Schema::create('roles', function (Blueprint $table) 
        $table->Increments('id');
        $table->string('name')->comment('Nombre del rol del usuario');
        $table->text('description');
        $table->timestamps();
    );

    Schema::create('users', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->unsignedInteger('role_id')->default(\App\Role::STUDENT);
        $table->foreign('role_id')->references('id')-> on('roles');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->string('picture')->nullable();

        //cashier columns
        $table->string('stripe_id')->nullable();
        $table->string('card_brand')->nullable();
        $table->string('card_last_four', 4)->nullable();
        $table->timestamp('trial_ends_at')->nullable();


        $table->rememberToken();
        $table->timestamps();
    );

    Schema::create('subscriptions',function (Blueprint $table) 
            $table->increments('id');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->string('name');
            $table->string('stripe_status');
            $table->string('stripe_plan');
            $table->integer('quantity');
            $table->timestamp('trial_ends_at')->nullable();
            $table->timestamp('ends_at')->nullable();
            $table->timestamps();
        );

    Schema::create('user_social_accounts', function (Blueprint $table) 
        $table->increments('id');
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('id')-> on('users');
        $table->string('provider');
        $table->string('provider_uid');

    );
    


    public function down()
    
    Schema::dropIfExists('users');
    Schema::dropIfExists('roles');
    Schema::dropIfExists('subscriptions');
    Schema::dropIfExists('user_social_accounts');
    
    

然后给我这个错误

列已存在:1060 列名重复'stripe_id'(SQL:更改表users添加stripe_idvarchar(255)null,添加card_brandvarchar(255)null,添加card_last_fourvarchar(4) null,添加trial_ends_attimestamp null)

异常跟踪:

1 PDOException::("SQLSTATE[42S21]: 列已经存在: 1060 列名重复'stripe_id'") C:\laragon\www\learning\vendor\laravel\framework\src\Illuminate\Database\Connection.php:459

2 PDOStatement::execute() C:\laragon\www\learning\vendor\laravel\framework\src\Illuminate\Database\Connection.php:459

【问题讨论】:

你试过php artisan migrate:fresh吗? 为什么我感觉你显示了错误的迁移文件? 是的,但问题仍然存在 【参考方案1】:

Cashier 带有迁移功能,可为您将“客户列”添加到 users 表中。

“Cashier 服务提供者注册了自己的数据库迁移目录,因此请记住在安装软件包后迁移您的数据库。Cashier 迁移将向您的用户表添加几列并创建一个新的订阅表来保存您客户的所有订阅”

Laravel 6.x Docs - Cashier - Installation

因此,这些迁移正在尝试添加您自己添加的列。

“如果您想阻止 Cashier 的迁移完全运行,您可以使用 Cashier 提供的ignoreMigrations。”

【讨论】:

【参考方案2】:

如果您使用的是 laravel/cashier,它将为您添加收银员列和订阅表的迁移。因此,您不必为此编写单独的迁移。移除收银台列和订阅的迁移,然后再次尝试迁移。

【讨论】:

以上是关于Laravel Column 已经存在:1060 Duplicate column name的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 ERROR 1060: Duplicate column name using Views -> Create View

BZOJ 1060 1060: [ZJOI2007]时态同步 (树形DP)

Laravel迁移,hasColumn方法失败

[bzoj1060]时态同步

bzoj1060 时态同步

BZOJ 1060: [ZJOI2007]时态同步 树形DP