本周我已将 laravel 应用程序php版本升级为 php 7.2 ,从那时起,我在 laravel 应用程序中遇到了大问题。在将 php升级到7.2 之前,每件事都很有效。
主要问题是关于 count()和 array_merge()这些错误的函数:
对于array_merge()
函数,代码如下:
$array = array_merge(
$model->toSearchableArray(), $model->scoutMetadata()
);
if (empty($array)) {
return;
}
ErrorException·array_merge():参数#1不是数组。
,当模型没有返回任何记录并返回null时,我在此代码中遇到count()
错误:
count(TutorialReview::where('TutorialID', 5)->where('UserID', 6)->get())
count()
:参数必须是实现Countable的数组或对象。
我的laravel版本 5.4
现在我的问题是如何解决问题,升级到 laravel 5.5 解决任何问题?
答案 0 :(得分:5)
在以下RFC中 PHP 7.2 更改了count()
行为:https://wiki.php.net/rfc/counting_non_countables
但你可以在 laravel 中使用->count()
进行统计,以下是一个例子:
$count = TutorialReview::where('TutorialID', 5)->where('UserID', 6)->get()->count();
通过这种方式,您可以获得总记录数。
答案 1 :(得分:4)
只需在@
之前添加count
即可。即。
@count(object or array);
答案 2 :(得分:1)
要解决array_merge()问题,请尝试以下步骤:
在app / config上使用数据
的sluggable.php配置文件 return ['source' => null, 'maxLength' => null, 'method' => null, 'separator' => '-', 'unique' => true, 'uniqueSuffix' => null, 'includeTrashed' => false, 'reserved' => null, 'onUpdate' => false, ];
执行命令php artisan config:cache
解决count()问题:Try This
count(): Parameter must be an array or an object that implements Countable.
实际上它不是错误,它是预期的行为。 Laravel 5.4或5.5与Php 7.2不完全兼容。 Count()行为只是在PHP 7.2中更改 Look at this
另一种方法是使用PHP 7.1或更低版本,直到修复了兼容性问题。
答案 3 :(得分:0)
试试这个:
$array = array_merge(
collect($model->toSearchableArray())->toArray(), $model->scoutMetadata()
);
当计算模型实例时,也需要->count()
代替count()
答案 4 :(得分:0)
只需在web.php中添加以下代码
if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
// Ignores notices and reports all other kinds... and warnings
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
// error_reporting(E_ALL ^ E_WARNING); // Maybe this is enough
}
答案 5 :(得分:-1)
7.2计数方法由于出于安全原因而无法使用,因此需要为该文档安装扩展程序