相关疑难解决方法(0)

使用外键Laravel错误删除列:常规错误:1025重命名时出错

我使用这样的迁移创建了一个表:

public function up()
{
    Schema::create('despatch_discrepancies',  function($table) {
        $table->increments('id')->unsigned();
        $table->integer('pick_id')->unsigned();
        $table->foreign('pick_id')->references('id')->on('picks');
        $table->integer('pick_detail_id')->unsigned();
        $table->foreign('pick_detail_id')->references('id')->on('pick_details');
        $table->integer('original_qty')->unsigned();
        $table->integer('shipped_qty')->unsigned();
    });
}

public function down()
{
    Schema::drop('despatch_discrepancies');
}
Run Code Online (Sandbox Code Playgroud)

我需要更改此表并删除外键引用和列,pick_detail_id并添加一个名为skuafter pick_idcolumn 的新varchar 列.

所以,我创建了另一个迁移,看起来像这样:

public function up()
{
    Schema::table('despatch_discrepancies', function($table)
    {
        $table->dropForeign('pick_detail_id');
        $table->dropColumn('pick_detail_id');
        $table->string('sku', 20)->after('pick_id');
    });
}

public function down()
{
    Schema::table('despatch_discrepancies', function($table)
    {
        $table->integer('pick_detail_id')->unsigned();
        $table->foreign('pick_detail_id')->references('id')->on('pick_details');
        $table->dropColumn('sku');
    });
}
Run Code Online (Sandbox Code Playgroud)

当我运行此迁移时,我收到以下错误:

[Illuminate\Database\QueryException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)(SQL:alter table despatch_discrepancies删除外键pick_detail_id)

[PDOException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)

当我尝试通过运行php artisan migrate:rollback命令来反转此迁移时,我收到一条Rolled back消息,但它实际上并没有在数据库中执行任何操作.

知道什么可能是错的吗?如何删除具有外键引用的列?

php database-migration laravel laravel-4

69
推荐指数
7
解决办法
6万
查看次数

标签 统计

database-migration ×1

laravel ×1

laravel-4 ×1

php ×1