SQLite在删除列时将字符串视为索引列

时间:2018-06-08 15:04:31

标签: laravel sqlite migration

<?php

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

class RemoveConstructionDateToOrdersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        if (Schema::hasColumn('orders', 'construction_date')) {
            Schema::table('orders', function (Blueprint $table) {
                $table->dropColumn('construction_date');
            });
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->date('construction_date');
        });
    }
}

当我在sqlite数据库上迁移这个laravel迁移时,我得到了 以下错误。

  

InvalidArgumentException:将字符串视为索引列

1 个答案:

答案 0 :(得分:0)

经过数小时的探索,我发现问题出在哪里。看起来教义/ dbal软件包无法重命名/处理/删除? 已具有索引

的SQLite列

所以我的解决方案是不要在以后在迁移中重命名的列上建立任何索引

我们当然希望索引存在于MySQL中,所以这是我的解决方案。

     Schema::table('comments', function (Blueprint $table) {
        $table->string('commentable_type', 100)->nullable()->after('id');

        //only add index if the connection is mysql
        if(config('DB_CONNECTION') === 'mysql'){
            $table->index('commentable_type');
        }
    });

因此,稍后您尝试重命名该列并使用SQLite时,它会起作用。