count(): Параметр должен быть массивом или объектом, который реализует Countable

Я сталкиваюсь со странным случаем. Я сталкиваюсь с ошибкой в производственной среде, а не в dev, она работает нормально.

Разработка: Laravel 5.4.28 PHP 7.0.13 MYSQL 5.7.17

Производство: Laravel 5.4.28 PHP 7.2.1 MYSQL 5.7.20

В коде реализации. Я использовал:

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

class Artwork extends Model
{
  use Searchable;

В разработке все работает нормально. Но в производстве это дает мне эту ошибку: count(): параметр должен быть массивом или объектом, который реализует счетное в Builder.php (строка 936)

как вы можете видеть на этой картинке:

enter image description here

Есть идеи, в чем причина этого? а как исправить?

Ответ 2

/Поместите этот код в начало вашего файла маршрутов, он будет работать нормально /

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

Ответ 3

Я столкнулся с аналогичной проблемой в Laravel 5.6. Где я получал ошибку для массива, основанного на объектах. Я знал, что данные в этой конкретной переменной всегда будут оставаться объектом, поэтому я использовал для преобразования объекта в массив. Вот пример кода: $objectData = (array)$objectData; echo "Total Elements in array are: ".count($objectData); $objectData = (array)$objectData; echo "Total Elements in array are: ".count($objectData);

Ответ 4

Заменить

$originalWhereCount = count($query->wheres);

от

$originalWhereCount = count((array)$query->wheres);

в

\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php

Ответ 5

поместите приведенную ниже строку ob code перед именем класса в ваших контроллерах

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
}

Ответ 6

Откройте этот файл

\Поставщика\Laravel\рамки\SRC\Осветите\Database\красноречивый\Builder.php

Ищу:

count($query->wheres);

и измените это на:

count((array) $query->wheres);

Ответ 7

Добавьте приведенный ниже код в ваш файл web.php

if (version_compare(PHP_VERSION, '7.2.0', '>=')) {

    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}

Ответ 8

Я разрешаю это в Laravel 5.6

//в контроллере

public function index()
{
$todos = Todo::all();
return view('todos.index')->with(['todos' => $todos]);

}

//на странице просмотра

@if(count($todos) > 0)
  @foreach($todos as $todo)
    <div class="well">
      <h3>{{$todo->text}}</h3>
      <span class="label label-danger">{{$todo->due}}</span>
    </div>
  @endforeach
@endif

Ответ 9

У меня такая же проблема, когда я использую Laravel 5.2, PHP 7.2

Я изменил строку ошибки 1185 в 'vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php' с помощью:

$originalWhereCount = is_array($query->wheres)? count($query->wheres): 0;

эта работа для меня