[英]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.