为了账号安全,请及时绑定邮箱和手机立即绑定

php artisan migrate 命令如何使用 Connection.php 文件?

php artisan migrate 命令如何使用 Connection.php 文件?

PHP
犯罪嫌疑人X 2023-08-19 10:35:25
我正在尝试修复 Laravel 项目构建中的错误,并想了解 php artisan migrate 命令到底完成了哪些步骤。该项目使用我的自定义包。我在包中创建了一个迁移,它向现有表添加了一个新列:    public function up()    {        Schema::table('products', function (Blueprint $table) {            $table->boolean('is_good_product')->default(0);        });    }    public function down()    {        Schema::table('products', function (Blueprint $table) {            $table->dropColumn('is_good_product');        });    }然后我将标签放入我的项目composer.json文件中的包版本中'package: dev-master#tag-number'并运行 Composer 更新包来更新 .lock 文件。3.1. 如果我在本地运行“php artisan migrate”命令,我会看到新的迁移运行并创建所需的列。3.2. 但是在远程阶段服务器上构建分支会出现以下错误。SQLSTATE[42S22]: Column not found: 1054 Unknown column 'is_good_product' in 'where clause' (SQL: select `name` from `products` where `is_good_product` = 1)  我在尝试迁移、回滚、刷新、截断数据库时看到此错误。只有手动创建列才能帮助我进行回滚然后迁移。为什么 Connection.php 文件正在寻找此列?包的迁移是否已开始但尚未完成?或者还会发生什么?[编辑]换句话说 - 为什么“artisan migrate”命令抱怨新添加的迁移文件的未知列?(如果应该运行它并添加列)。如果迁移未运行(因为未创建列),Connection.php 文件如何了解该列?
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

经过深入研究,我找到了迁移命令不起作用的原因。问题出在我的存储库的构造函数之一中,它调用了使用该列的函数。我不知道 Laravel 在运行迁移之前会以某种方式在存储库中运行源代码。我仍然想找出 migrate 命令完成的步骤。



查看完整回答
反对 回复 2023-08-19
?
Helenr

TA贡献1780条经验 获得超3个赞

解决您的问题的快速方法是:


public function down()


{    

   if (Schema::hasColumn('products', 'is_good_product'))


    {


        Schema::table('products', function (Blueprint $table)


        {


            $table->dropColumn('is_good_product');


        });


    }

}

您收到 Connection.php 错误的原因是因为它没有找到删除它的列。


查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信