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?
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.
Ajoutez simplement @
avant count
. C'EST À DIRE.
@count(object or array);
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
}
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()
Pour résoudre le problème array_merge (), essayez les étapes suivantes:
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,];
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.