今週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を実装する配列またはオブジェクトでなければなりません。
my laravelバージョンは5.4
今私の質問は、どのように問題を解決できますか?laravel 5.5にアップグレードすると問題が解決しますか?
PHP 7.2では、次のRFCのcount()
動作が変更されました。 https://wiki.php.net/rfc/counting_non_countables
ただし、laravelで->count()
を使用してカウントを取得できます。以下に例を示します。
$count = TutorialReview::where('TutorialID', 5)->where('UserID', 6)->get()->count();
これにより、合計レコード数を取得できます。
count
の前に@
を追加するだけです。 I.E.
@count(object or array);
array_merge()issueを解決するには、次の手順を試してください。
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 this) で変更されるだけです
別の方法では、互換性の問題が修正されるまでPHP 7.1以下を使用します。
以下のコードを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
}
これを試して:
_$array = array_merge(
collect($model->toSearchableArray())->toArray(), $model->scoutMetadata()
);
_
また、モデルインスタンスをカウントするときに、->count()
の代わりにcount()
でこれを行います