@maksim_fix
Junior PHP developer

Relationship method must return an object of type?

Здравствуйте, пишу блог на Laravel, но тут вышла ошибка:
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation (View: /home/ssciiike/blog.glezer.ru/resources/views/pages/show.blade.php)

Хотел сделать пагинацию(предыдущий и следующий пост)
Вот код Post.php(модель), который я написал после того как у меня вышла ошибка:
public function hasPrevious()
    {
        return self::where('id', '<', $this->id)->max('id');
    }

    public function getPrevious()
    {
        $postID = $this->hasPrevious(); //ID
        return self::find($postID);
    }

    public function hasNext()
    {
        return self::where('id', '>', $this->id)->min('id');
    }

    public function getNext()
    {
        $postID = $this->hasNext();
        return self::find($postID);
    }


Вот код show.blade.php(следующий/предыдущий пост)
<div class="row"><!--blog next previous-->
                    <div class="col-md-6">
                    @if($post->hasPrevious())
                        <div class="single-blog-box">
                            <a href="{{route('post.show', $post->getPrevious()->slug)}}">
                                <img src="{{$post->getPrevious->getImage()}}" alt="">

                                <div class="overlay">

                                    <div class="promo-text">
                                        <p><i class=" pull-left fa fa-angle-left"></i></p>
                                        <h5>{{$post->getPrevious()->title}}</h5>
                                    </div>
                                </div>
                            </a>
                        </div>
                    @endif
                    </div>
                    <div class="col-md-6">
                    @if($post->hasNext())
                        <div class="single-blog-box">
                            <a href="{{route('post.show', $post->getNext()->slug)}}">
                                <img src="{{$post->getNext()->getImage()}}" alt="">

                                <div class="overlay">
                                    <div class="promo-text">
                                        <p><i class=" pull-right fa fa-angle-right"></i></p>
                                        <h5>{{$post->getNext()->title}}</h5>
                                    </div>
                                </div>
                            </a>
                        </div>
                    @endif
                    </div>
                </div><!--blog next previous end-->

Буду очень благодарен за помощь
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
Помедитируйте на строку
<img src="{{$post->getPrevious->getImage()}}" alt="">

Потом почитайте доку про связи. А потом либо используйте связи, как надо, либо не используйте вообще.
Заодно и про пагинацию почитайте, что бы не изобретать велосипед с квадратными колёсами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ART_CORP
Hard work
Максим Фикс
1) У laravel есть пагинация https://laravel.com/docs/5.6/pagination
2) для не статических методов используйте $this вместо self
3) и где метод getImage ? в модели я его не вижу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы