[英]How php artisan migrate command uses Connection.php file?
我正在尝试使用我的 Laravel 项目构建来修复该错误,并想了解 php artisan migrate 命令究竟完成了哪些步骤。
该项目使用我的自定义 package。
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');
});
}
'package: dev-master#tag-number'
并运行 composer update package 到 update.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 文件正在寻找此列? 从 package 的迁移是否已开始但尚未完成? 或者还会发生什么?
[编辑]换句话说 - 为什么“工匠迁移”命令抱怨新添加的迁移文件的未知列? (如果应该运行它并添加列)。 如果迁移未运行(因为未创建列),Connection.php 文件如何知道该列?
快速解决您的问题是:
public function down()
{
if (Schema::hasColumn('products', 'is_good_product'))
{
Schema::table('products', function (Blueprint $table)
{
$table->dropColumn('is_good_product');
});
}
}
您收到 Connection.php 错误的原因是因为它没有找到删除它的列。
经过深入研究,我找到了 migrate 命令不起作用的原因。 问题出在我的存储库的一个构造函数中,该构造函数调用了使用该列的 function。 我不知道 Laravel 在运行迁移之前以某种方式在存储库中运行源代码。 而且我仍然想找出迁移命令完成的步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.