Я использую 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 (), также получаю ту же ошибку
как я могу решить эту ошибку






Я поменял строку 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. `` ''
В нашей ситуации со старым проектом это было нашим единственным решением до тех пор, пока мы не смогли обновить версии php и laravel.
Laravel 5.3 и моя версия PHP 7.1 несовместимы друг с другом Обратитесь к этому вопросу в github
Чтобы решить эту ошибку, вы можете сделать две вещи
У меня была такая же проблема с методом laravel find(), возвращающим объект, а не массив. Поэтому метод count() работать не будет. Пытаться:
Переполнение стека раствор или
Post::all()->toArray();
Вернет массив, который будет работать с методом count().
В качестве обходного пути добавьте это в свой файл маршрутов:
if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}
Вам нужно будет посмотреть глубже, проблема не в опубликованном вами коде. В сообщении об ошибке должно быть указано имя файла и номер строки, где вызывается
count(). Чтобы помочь вам отладить это, нам нужно знать, что передается вcount()и откуда оно взялось.