在 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 模型方法?

使用 find() 模拟 Eloquent 模型

如何在没有 Eloquent 的情况下创建 Laravel 模型?

无法在模型对象 Laravel 上调用 SAVE 方法