web-dev-qa-db-fra.com

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

Je suis confronté à un cas étrange. Je suis confronté à une erreur dans la production env pas tout en développement cela fonctionne bien. 

Développement: Laravel 5.4.28 PHP 7.0.13 MYSQL 5.7.17

Production: Laravel 5.4.28 PHP 7.2.1 MYSQL 5.7.20

En code d'implémentation. J'ai utilisé:

namespace App;
use Illuminate\Support\Facades\Storage;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Artwork extends Model
{
  use Searchable;

En développement cela fonctionne bien. Mais en production, cela me donne cette erreur: Count (): le paramètre doit être un tableau ou un objet qui implémente Countablein Builder.php (ligne 936)

comme vous pouvez le voir sur cette photo: entrez la description de l'image ici Avez-vous une idée de la raison derrière tout cela? et comment réparer?

10
Khaled Al-Shehri

Ceci est une modification documentée dans PHP 7.2 . Vous devez mettre à jour Laravel vers 5.6 ou rétrograder PHP vers la version 7.1.

8
Ben Harold

/ Mettez ce code au début de votre fichier de routes cela fonctionnera bien /

if(version_compare(PHP_VERSION, '7.2.0', '>=')) {
    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}
7
Akash Kulshrestha

Je faisais face à un problème similaire dans Laravel 5.6. Où j'obtenais une erreur pour un tableau basé sur les objets. Je savais que les données de cette variable resteraient toujours objet, donc je convertissais l'objet en tableau. Voici un exemple de code: $objectData = (array)$objectData; echo "Total Elements in array are: ".count($objectData);

3
Farid Abbas

placez le code ob de la ligne ci-dessous avant le nom de la classe dans vos contrôleurs

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
ILIAS M. DOLAPO