web-dev-qa-db-fra.com

Résoudre le problème de la mise à niveau vers PHP 7.2 dans l'application Laravel 5.4

J'ai mis à niveau ma version php de l'application laravel à php 7.2 cette semaine et depuis lors, je suis confronté à de gros problèmes dans mon application laravel. avant de passer de php à 7.2, tout fonctionnait parfaitement.

le problème principal concerne les fonctions count () et array_merge () qui génèrent cette erreur:

pour array_merge(), le code est le suivant:

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

            if (empty($array)) {
                return;
            }

ErrorException · array_merge (): l'argument n ° 1 n'est pas un tableau.

et je suis confronté à l'erreur count() par exemple à ce code lorsque le modèle ne renvoie aucun enregistrement et renvoie la valeur null:

count(TutorialReview::where('TutorialID', 5)->where('UserID', 6)->get())

count(): Le paramètre doit être un tableau ou un objet implémentant Countable.

ma version laravel est 5.4

ma question est la suivante: comment puis-je résoudre les problèmes et la mise à niveau vers Laravel 5.5 résout-elle les problèmes?

5
atieh mokhtary

Dans PHP 7.2 a modifié le comportement de count() dans le RFC suivant: https://wiki.php.net/rfc/counting_non_countables

Mais vous pouvez compter avec ->count() dans laravel, en voici un exemple:

$count = TutorialReview::where('TutorialID', 5)->where('UserID', 6)->get()->count();

De cette façon, vous pouvez obtenir le nombre total d'enregistrements.

5
Bhavin Solanki

Ajoutez simplement @ avant count. C'EST À DIRE.

@count(object or array);
4
Amos Chihi

ajoutez simplement le code ci-dessous dans 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

essaye ça: 

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

également lorsque vous comptez une instance de modèle, faites ceci par ->count() au lieu de count()

0
DorienCragen

Pour résoudre le problème array_merge (), essayez les étapes suivantes:

  1. sluggable.php fichier de configuration à app/config avec des données

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

  2. Exécutez la commande, php artisan config:cache 

Pour résoudre count () issue: Try This

count(): Parameter must be an array or an object that implements Countable.

En réalité, ce n'est pas une erreur, c'est un comportement attendu. Laravel 5.4 ou 5.5 n'est pas totalement compatible avec Php 7.2 ..____. Le comportement de Count () change juste à PHP 7.2 Regardez ceci

Une autre façon consiste simplement à utiliser PHP 7.1 ou inférieur jusqu'à ce que le problème de compatibilité soit résolu.

0
Minar Mnr