Laravel迁移,在hasColumn方法上失败

时间:2018-08-20 20:55:03

标签: php laravel laravel-5.2 laravel-migrations mysql-8.0

我正在使用laravel 5.2版本和PHP 7.1。我正在尝试从laravel项目中迁移文件,在该项目中我具有检查列是否存在的代码,如下所示-

if (!Schema::hasColumn('table1', 'column1')) {
    // Add column1
}

我知道代码是完美的,并且在设置相同的代码时已经工作了好几次了。但是现在我在另一台计算机上尝试此操作,但失败并显示错误-

  

[ErrorException]
未定义的属性:   stdClass :: $ column_name

如果我从代码中删除hasColumn检查,就可以摆脱此错误,但这是我在整个代码中编写的内容,并且不能仅仅为了运行迁移而修改每个迁移。

对此有任何帮助,深表感谢。

堆栈跟踪:

  

[ErrorException]
未定义的属性:stdClass :: $ column_name

     

异常跟踪:()位于   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php:18   在以下位置照亮\ Foundation \ Bootstrap \ HandleExceptions-> handleError()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php:18   Illuminate \ Database \ Query \ Processors \ MySqlProcessor-> Illuminate \ Database \ Query \ Processors {closure}()   在n / a:n / a array_map()在   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php:21   Illuminate \ Database \ Query \ Processors \ MySqlProcessor-> processColumnListing()   在   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php:40   在以下位置照亮\ Database \ Schema \ MySqlBuilder-> getColumnListing()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:69   在以下位置照亮\ Database \ Schema \ Builder-> hasColumn()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:217   在以下位置照亮\ Support \ Facades \ Facade :: __ callStatic()   /private/var/www/html/whitelabel_eb/database/migrations/2017_07_28_053158_add_columns_to_project_configurations_table.php:16   AddColumnsToProjectConfigurationsTable-> {closure}()位于   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php:69   在以下位置照亮\ Database \ Schema \ Blueprint-> __ construct()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:207   在以下位置照亮\ Database \ Schema \ Builder-> createBlueprint()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:116   在以下位置照亮\ Database \ Schema \ Builder-> table()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:217   在以下位置照亮\ Support \ Facades \ Facade :: __ callStatic()   /private/var/www/html/whitelabel_eb/database/migrations/2017_07_28_053158_add_columns_to_project_configurations_table.php:103   AddColumnsToProjectConfigurationsTable-> up()位于   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:135   在以下位置照亮\ Database \ Migrations \ Migrator-> runUp()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:112   在以下位置照亮\ Database \ Migrations \ Migrator-> runMigrationList()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:85   在以下位置照亮\ Database \ Migrations \ Migrator-> run()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:74   在以下位置照亮\ Database \ Console \ Migrations \ MigrateCommand-> fire()   不适用:n / a call_user_func_array()在   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Container/Container.php:507   在以下位置照亮\ Container \ Container-> call()   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Console/Command.php:150   在以下位置照亮\ Console \ Command-> execute()   /private/var/www/html/whitelabel_eb/vendor/symfony/console/Command/Command.php:238   Symfony \ Component \ Console \ Command \ Command-> run()位于   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Console/Command.php:136   在以下位置照亮\ Console \ Command-> run()   /private/var/www/html/whitelabel_eb/vendor/symfony/console/Application.php:840   Symfony \ Component \ Console \ Application-> doRunCommand()在   /private/var/www/html/whitelabel_eb/vendor/symfony/console/Application.php:190   Symfony \ Component \ Console \ Application-> doRun()在   /private/var/www/html/whitelabel_eb/vendor/symfony/console/Application.php:114   Symfony \ Component \ Console \ Application-> run()在   /private/var/www/html/whitelabel_eb/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:107   在以下位置照亮\ Foundation \ Console \ Kernel-> handle()   / private / var / www / html / whitelabel_eb / artisan:35

2 个答案:

答案 0 :(得分:0)

看着问题,可能https://github.com/laravel/framework/pull/21037可以解决,但是此更改是针对Laravel 5.5进行的。 Laravel 5.2已不再受支持,因此您可以在需要时尝试使用带有此修复程序的自己的fork-您可以使用Composer VCS功能。

当然,升级到最新版本可能是一个好主意(在以后的版本中解决了很多问题),但是假设您的应用很复杂且没有适当的测试,则可能会有风险。

答案 1 :(得分:0)

我做了以下更改来解决此问题。 转到以下路径:/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php

更改此设置, return $r->column_name;行号18   至 return $r->COLUMN_NAME;