Illuminate \ Pagination \ LengthAwarePaginator类的对象无法转换为int

时间:2019-11-18 14:24:30

标签: php laravel

public function index(Request $request)
    {
        if($request->search) {
            $posts = Post::join('users', 'author_id', '=', 'users.id')
                ->where('title', 'like', '%'.$request->search.'%')
                ->Orwhere('descr', 'like', '%'.$request->search.'%')
                ->Orwhere('name', 'like', '%'.$request->search.'%')
                ->orderBy('posts.created_at', 'desc')
                ->get();
            return view('posts.index', compact('posts'));
        }
-
        $posts = Post::join('users', 'author_id', '=', 'users.id')
            ->orderBy('posts.created_at', 'desc')
            ->paginate(6);

        return view('posts.index', compact('posts'));
    }

error

视图

@extends('layouts.layout')

@section('content')
    @if(isset($_GET['search']))
        @if(count($posts) > 5)
            <h2>Результаты поиска по запросу <?= $_GET['search'] ?></h2>
            <p class="lead">Всего найдено: {{ count($posts) }} постов</p>
        @elseif(count($posts) == 1)
            <h2>Результаты поиска по запросу <?= $_GET['search'] ?></h2>
            <p class="lead">Всего найдено: {{ count($posts) }} пост</p>
        @elseif(count($posts) == 2 || count($posts) == 3 || count($posts) == 4)
            <h2>Результаты поиска по запросу <?= $_GET['search'] ?></h2>
            <p class="lead">Всего найдено: {{ count($posts) }} поста</p>
        @else
            <h2>По запросу <?= $_GET['search'] ?> ничего не найдено</h2>
            <a href="{{ route('post.index') }}" class="btn btn-outline-danger">Отобразить все посты</a>
        @endif
    @endif

    <div class="row">
        @foreach($posts as $post)
        <div class="col-6 mt-3">
            <div class="card">
                <div class="card-header">
                    <h2>{{ $post->short_title }}</h2>
                </div>
                <div class="card-body">
                    <div class="card-img mb-2" style="background-image: url({{ $post->img ?? asset('img/default.png') }});"></div>
                    <div class="card-author mb-2">
                        <h5><span class="badge badge-secondary">Автор:</span> {{ $post->name }}</h5>
                    </div>
                    <a href="{{ route('post.show', ['id' => $post->post_id]) }}" class="btn btn-outline-danger mb-2">Посмотреть пост</a>
                </div>
            </div>
        </div>
        @endforeach 
    </div>

    @if(!isset($_GET['search']))
        {{ $posts->links() }}
    @endif
@endsection 

Всемпривет。 Помогитеразобраться,вчёмошибка。 Выдаётэто- Illuminate \ Pagination \ LengthAwarePaginator类的对象无法转换为int

你好帮助我找出错误所在。给它- Illuminate \ Pagination \ LengthAwarePaginator类的对象无法转换为int

1 个答案:

答案 0 :(得分:0)

第29行的连字符是问题的根源,请将其删除,即可开始使用,PHP尝试将$posts强制转换为整数以应用- $posts,因此出现错误。如果有搜索词,还需要对帖子进行分页,以使传递到posts.index视图的数据保持一致。编写代码的更好方法:

public function index(Request $request)
{
    $posts = Post::join('users', 'author_id', '=', 'users.id')
        ->orderBy('posts.created_at', 'desc');

    if($request->search) {
        $posts = $posts->where('title', 'like', '%'.$request->search.'%')
            ->Orwhere('descr', 'like', '%'.$request->search.'%')
            ->Orwhere('name', 'like', '%'.$request->search.'%');
    }

    $posts = $posts->paginate(6);

    return view('posts.index', compact('posts'));
}