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

Я использую Laravel 5.3, а моя версия php - 7.1

когда я вызвал класс SoftDeletes, я получаю эту ошибку

ErrorException в строке 1231 Builder.php: count (): параметр должен быть массивом или объектом, реализующим Countable

это моя модель

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;


class Post extends Model
{

    use SoftDeletes;

    protected $dates = ['deleted_at'];

    protected $fillable = [

        'title','content','image','category_id','slug'
    ];



    public function category(){


        return $this->belongsTo('App\Category');
    }
}

и это мой контроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Post;

use App\Category;

use Session;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {



        return view('admin.posts.index')->with('posts',Post::all());

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $category = Category::all();

        if ($category->count() == 0){

            Session::flash('info' , 'You must create at least 1 category to add a new post');

            return redirect()->back();
        }

        return view('admin.posts.post')->with('categories',$category);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

        $this->validate($request,[

            'title'         => 'required|max:255',
            'image'         => 'required|image',
            'content'       => 'required',
            'category_id'   => 'required'
        ]);


        $image = $request->image;

        $image_new_name = time().$image->getClientOriginalName();

        $image->move('/uploads/posts' , $image_new_name);



        $post= Post::create([

            'title'          => $request->title,
            'image'          => '/uploads/posts/' . $image_new_name,
            'content'        => $request->content,
            'category_id'    => $request->category_id,
            'slug'           => str_slug($request->title)
        ]);

        Session::flash('success' , 'You created a new post');

        return redirect()->back();



    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

и когда я удаляю функцию count (), также получаю ту же ошибку

как я могу решить эту ошибку

Вам нужно будет посмотреть глубже, проблема не в опубликованном вами коде. В сообщении об ошибке должно быть указано имя файла и номер строки, где вызывается count(). Чтобы помочь вам отладить это, нам нужно знать, что передается в count() и откуда оно взялось.

rickdenhaan 08.12.2018 22:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
1
9 470
4

Ответы 4

Я поменял строку 1231 в C:\laragon\www\mystore\vendor\laravel\framework\src\Illuminate\Database\Eloquent

к

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

Изменение кода в каталоге поставщика - плохая идея. - Эти изменения исчезнут после того, как вы запустите команду composer update или install - Подобные изменения могут привести к очень неожиданному поведению в приложении - Поверьте мне, это не оптимальное решение, поскольку оно нарушит код в другой области `` Я лично Предлагаем проверить вашу зависимость от laravel и php и обновить поддерживаемый PHP / laravel. В таком случае. Поддерживается PHP 5.6, но не PHP 7.2. `` ''

Vikas Rinvi 27.04.2019 12:20

В нашей ситуации со старым проектом это было нашим единственным решением до тех пор, пока мы не смогли обновить версии php и laravel.

Diego Galocha 18.08.2020 11:11

Laravel 5.3 и моя версия PHP 7.1 несовместимы друг с другом Обратитесь к этому вопросу в github

Чтобы решить эту ошибку, вы можете сделать две вещи

  • Обновите laravel 5.3 до laravel 5.5, обратитесь к этому (От 5,3 до 5,4, 5,4–5,5)
  • Понизьте ваш php до php 5.6

У меня была такая же проблема с методом laravel find(), возвращающим объект, а не массив. Поэтому метод count() работать не будет. Пытаться: Переполнение стека раствор или

Post::all()->toArray();

Вернет массив, который будет работать с методом count().

В качестве обходного пути добавьте это в свой файл маршрутов:

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

Другие вопросы по теме