web-dev-qa-db-ja.com

laravel 5.4アプリケーションでPHP 7.2にアップグレードする問題を解決する

今週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にアップグレードすると問題が解決しますか?

7
atieh mokhtary

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();

これにより、合計レコード数を取得できます。

5
Bhavin Solanki

countの前に@を追加するだけです。 I.E.

@count(object or array);
3
Amos Chihi

array_merge()issueを解決するには、次の手順を試してください。

  1. app/configのsluggable.php構成ファイルとデータ

    return ['source' => null, 'maxLength' => null, 'method' => null, 'separator' => '-', 'unique' => true, 'uniqueSuffix' => null, 'includeTrashed' => false, 'reserved' => null, 'onUpdate' => false, ];

  2. コマンドを実行します、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以下を使用します。

1
Minar Mnr

以下のコードを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
}
0
Rahul Tathod

これを試して:

_$array = array_merge(
    collect($model->toSearchableArray())->toArray(), $model->scoutMetadata()
);
_

また、モデルインスタンスをカウントするときに、->count()の代わりにcount()でこれを行います

0
DorienCragen