Laravel Migrate:“列已存在”1060 列名重复

Posted

技术标签:

【中文标题】Laravel Migrate:“列已存在”1060 列名重复【英文标题】:Laravel Migrate: "Column Already Exists" 1060 Duplicate Column Name 【发布时间】:2021-09-03 00:21:51 【问题描述】:

这是我用来学习的一个新鲜的 laravel 应用程序。没有当前表,因为这将是新的/首次迁移。为什么它给我这个错误:

SQLSTATE[42S21]:列已存在:1060 列名重复 'title' (SQL: 创建表categories (id bigint unsigned not null auto_increment 主键,title varchar(255) 不为空,detail varchar(300) 不为空,image varchar(255) 不为空,title varchar(255) 不为空,created_at 时间戳为空,updated_at timestamp null) 默认字符集 utf8mb4 collat​​e 'utf8mb4_unicode_ci')

<?php

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

class CreateCategoriesTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('categories', function (Blueprint $table) 
            $table->id();
            $table->string('title');
            $table->string('detail', 300);
            $table->string('image');
            $table->timestamps();
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::dropIfExists('categories');
    

【问题讨论】:

交叉检查数据库的 .env 文件设置。希望您的数据库没有此类别表。 它没有。在 phpMyAdmin 中没有“类别”表和“类别”迁移,但是错误表明“标题”列由于某种原因存在两次。 你试过php artisan optimize:clearcomposer dump-autoload吗? 【参考方案1】:

如果您已更新 categories 表的原始表迁移,则需要将参数 fresh 添加到您的 php artisan migrate 命令中,如下所示:

php artisan migrate:refresh

请注意,这将从数据库中删除所有数据。

如果您不喜欢该方法,请添加change() 添加detail 字段的末尾:

$table->string('detail', 300)->change();

【讨论】:

【参考方案2】:

已修复。出于某种原因,我所要做的就是将“详细信息”从字符串更改为如下文本:

$table->string('detail', 300)

$table->text('detail', 300)

我不明白为什么会这样,但确实有效。

【讨论】:

以上是关于Laravel Migrate:“列已存在”1060 列名重复的主要内容,如果未能解决你的问题,请参考以下文章

不能将 migrate 与帆 laravel 一起使用

Laravel 4.2 和 migrate 无法正常工作

缺少右括号和添加的列已存在于我的代码中显示的表错误中

Laravel 4 migrate:rollback with --path on artisan CLI

Laravel 4 migrate:rollback with --path on artisan CLI

php Laravel Migrate错误修复