我正在使用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
答案 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;