Kha*_*hri 20 laravel laravel-5 laravel-scout
我面临着奇怪的情况.我在生产环境中遇到错误,而在开发环境中工作正常.
开发:Laravel 5.4.28 PHP 7.0.13 MYSQL 5.7.17
制作:Laravel 5.4.28 PHP 7.2.1 MYSQL 5.7.20
在实现代码中.我用了:
namespace App;
use Illuminate\Support\Facades\Storage;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Artwork extends Model
{
use Searchable;
Run Code Online (Sandbox Code Playgroud)
在开发中它工作正常.但是在生产中它给了我这个错误:count():参数必须是一个数组或在Builder.php中实现Countable的对象(第936行)
正如你在这张照片中看到的: 在这里输入图像描述 任何想法背后的原因是什么?以及如何解决?
小智 28
/ 将此代码放在您的路径文件的开头,它将正常工作 /
if(version_compare(PHP_VERSION, '7.2.0', '>=')) {
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}
Run Code Online (Sandbox Code Playgroud)
Aki*_*yed 16
代替
$originalWhereCount = count($query->wheres);
Run Code Online (Sandbox Code Playgroud)
经过
$originalWhereCount = count((array)$query->wheres);
Run Code Online (Sandbox Code Playgroud)
在
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php
小智 7
出现此错误的原因是您使用的是较高的 PHP 版本,而您的 Laravel 应用程序使用的是较旧的 PHP 版本。
\n\n\n\xe2\x9c\x85 简单的解决方案:
\n
打开:app/Providers/AppServiceProvider.php
\n并在:public function register() { ... }函数中添加以下代码:
\nif(version_compare(PHP_VERSION, '7.2.0', '>=')) {\n error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);\n}\n
Run Code Online (Sandbox Code Playgroud)\n
我在Laravel 5.6中面临类似的问题。我在基于对象的数组出错的地方。我知道那个特定变量中的数据将始终是对象,因此我曾经将对象转换为数组。这是代码示例:
$objectData = (array)$objectData;
echo "Total Elements in array are: ".count($objectData);
当我更新到PHP 7.2时, 我的服务器运行的是PHP 7.1我遇到了同样的问题。
搜索后我找到了为什么会发生这种情况。(发生这种情况是因为 PHP 更新。)。
所以在我的情况下,错误是通过类型转换解决的。
我只是更新我曾经计算过的所有代码
前
//this is before
count($adminDetails)
Run Code Online (Sandbox Code Playgroud)
更新后
//after update all i typecast all the code where i used count
count((array)$adminDetails)
Run Code Online (Sandbox Code Playgroud)
祝你好运
小智 5
在 php 7.2+ 中 count 不适用于关系对象,您需要使用:
$model->relation()->exists()
Run Code Online (Sandbox Code Playgroud)
不是这个(小于 php 7.2):
count($model->relation)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32387 次 |
最近记录: |