我使用如下迁移创建了一个表:

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');
}

我需要更改此表并删除外键引用&列pick_detail_id,并在pick_id列之后添加一个名为sku的新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');
    });
}

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

[Illumb\Database\QueryException]

[PDOException]
SQLSTATE[HY000]:常规错误:1025重命名时出错 ‘./dev_iwms_reboot/despatch_dispanciations’到 ‘./dev_iwms_reboot/#sql2-67c-17c464’(错误号:152)

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

你知道可能出了什么问题吗?如何删除具有外键引用的列?

推荐答案

事实证明;当您创建这样的外键时:

$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');

Laravel对外键引用进行唯一命名,如下所示:

<table_name>_<foreign_table_name>_<column_name>_foreign
despatch_discrepancies_pick_detail_id_foreign (in my case)

因此,当您想要删除具有外键引用的列时,您必须这样做:

$table->dropForeign('despatch_discrepancies_pick_detail_id_foreign');
$table->dropColumn('pick_detail_id');

更新:

Laravel 4.2+引入了新的命名约定:

<table_name>_<column_name>_foreign

Php相关问答推荐

shell_exec()在后台执行nohup时不会立即返回

在WooCommerce checkout 时请求强制旅客信息并在感谢、邮箱和管理命令中显示

Laravel 11发送邮箱时奇怪的未定义数组键名称

基于验证动态更改输入字段类(名称密码)&

如何在函数中定位WooCommerce产品循环

在Laravel Eloquent中实现一对多关系

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

如何从Laravel中的Spatie\Dns\Records\A对象中提取IP地址

升级到PHP 8.2后无法删除cURL Cookie文件

CKEDITOR-如何在PHP中判断提交后的空数据

在 WooCommerce 更新结帐事件上动态更新自定义内容

在 WooCommerce 订阅续订订单中设置送货方式

如何限制 woocommerce 中相关产品的标题长度

VS Code 对 PHP 上从父类继承的方法报告误报

自定义主键值未正确显示

在 PHP 中验证签名

如何从此字符串创建 Carbon 对象:2022-06-21T05:52:46.648533678Z?

PHP 中是否有 is_closure() 函数?

为什么 AJAX 请求没有通过 is_ajax_request() codeigniter 的条件?

在 laravel 中更新表单时如何在 Select 选项中保留旧值?