簡體   English   中英

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

[英]How php artisan migrate command uses Connection.php file?

我正在嘗試使用我的 Laravel 項目構建來修復該錯誤,並想了解 php artisan migrate 命令究竟完成了哪些步驟。

該項目使用我的自定義 package。

  1. 我在 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');
        });
    }
  1. 然后我把標簽放到我的項目composer.json文件中的package版本
'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM