在 Eloquent 模型上调用块时 /bootstrap/cache/compiled.php 中的 BadMethodCallException
Posted
技术标签:
【中文标题】在 Eloquent 模型上调用块时 /bootstrap/cache/compiled.php 中的 BadMethodCallException【英文标题】:BadMethodCallException in /bootstrap/cache/compiled.php when calling chunk on Eloquent Model 【发布时间】:2019-07-18 13:28:38 【问题描述】:每当我在 Eloquent 模型上使用块方法时,我都会收到 [BadMethodCallException] Method isNotEmpty does not exist
。
我在我的所有服务器(测试、登台和生产)上都收到了这个错误,但在我的本地机器上却没有,即使所有 4 台机器都有相同版本的 php、laravel。
堆栈跟踪
[2019-02-25 11:51:04] staging.ERROR: BadMethodCallException: 方法 isNotEmpty 不存在。在 /api/bootstrap/cache/compiled.php:6366 堆栈跟踪: 0 /api/vendor/baopham/dynamodb/src/DynamoDbQueryBuilder.php(430): Illuminate\Support\Collection->__call('isNotEmpty', Array) 1 /api/app/Console/Commands/IndexInvoicesToElastic.php(142): BaoPham\DynamoDb\DynamoDbQueryBuilder->chunk(10000, Object(Closure)) 2【内部函数】:App\Console\Commands\IndexInvoicesToElastic->handle() 3 /api/bootstrap/cache/compiled.php(1257): call_user_func_array(Array, Array) 4 /api/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array) 5 /api/vendor/symfony/console/Command/Command.php(256): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output \控制台输出)) 6 /api/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), 对象(Symfony\Component\Console\Output\ConsoleOutput)) 7 /api/vendor/symfony/console/Application.php(794): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput )) 8 /api/vendor/symfony/console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(App\Console\Commands\IndexInvoicesToElastic), Object(Symfony\Component\Console\Input\ArgvInput ), 对象(Symfony\Component\Console\Output\ConsoleOutput)) 9 /api/vendor/symfony/console/Application.php(117): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output \控制台输出)) 10 /api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), 对象(Symfony\Component\Console\Output\ConsoleOutput)) 11 /api/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 12 主要
版本信息 Laravel:5.2
【问题讨论】:
【参考方案1】:Laravel 5.2 不支持 isNotEmpty,它是在 Laravel 5.3 中引入的。但是你为什么不使用像这样简单的东西:
// If collection exist
if($yourCollection)
// your code
else
//do something else
【讨论】:
【参考方案2】:我没有看到方法 isNotEmpty on Laravel 5.2 collections documentation。 isNotEmpty was introduced on 5.3
【讨论】:
但是这个方法存在于这个文件/vendor/laravel/framework/src/Illuminate/Support/Collection.php
中,我本地机器和服务器上的laravel版本是Laravel Framework version 5.2.45
。如果这个方法是在 Laravel 5.3 中引入的,那么这个方法在本地机器上是行不通的
我在 Laravel 5.2 上找不到对 isNotEmpty 的引用,github.com/laravel/framework/blob/5.2/src/Illuminate/Support/… 你确定你在本地机器上安装了相同的版本吗?您可以通过执行以下操作来检查它:'composer info | grep laravel/framework ' 在你的项目中以上是关于在 Eloquent 模型上调用块时 /bootstrap/cache/compiled.php 中的 BadMethodCallException的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Eloquent 模型中调用方法时出现“不应静态调用非静态方法”?
在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型
如何测试 Laravel 5.4 中的“创建”事件是不是调用了 Eloquent 模型方法?