replica410
@replica410 (陽 有村)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravelでのページネーションの実装について

解決したいこと

laravelで画像投稿サイトを作成しているのですが、いいねを付けた投稿を見られる「いいね一覧ページ」にてページネーションの実装をする方法が分からず困っています。

発生している問題・エラー

Method Illuminate\Database\Eloquent\Collection::latest does not exist.

該当するソースコード

LikeController.php(いいね一覧のコントローラーが書かれた部分)
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class LikeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    
    // いいね一覧
    public function index()
    {
        $like_posts = \Auth::user()->likePosts()->latest()->paginate(5);
        return view('likes.index',[
            'title' => 'いいね一覧',
            'like_posts' => $like_posts,
        ]);
    }
    
    // いいね追加処理
    public function store(Request $request)
    {
        //
    }
    
    // いいね削除処理
    public function destroy($id)
    {
        //    
    }
}
index.blade.php(いいね一覧ページのビュー)
@extends('layouts.logged_in')
 
@section('content')
  <h1>{{ $title }}</h1>
 
  <ul class="posts">
      @forelse($like_posts as $post)
          <li class="post like_post">
            <div class="post_content">
              <div class="post_body">
                <div class="post_body_heading">
                  投稿者:{{ $post->user->name }}
                  ({{ $post->created_at }})
                </div>
                <div class="post_body_main">
                  <div class="post_body_main_img">
                    @if($post->image !== '')
                        <img src="{{ asset('storage/' . $post->image) }}">
                    @else
                        <img src="{{ asset('images/no_image.png') }}">
                    @endif
                    <a href="{{ route('posts.edit_image', $post) }}">画像を変更</a>
                  </div>
                  <div class="post_body_main_comment">
                    {{ $post->comment }}
                  </div>
                </div>
                <div class="post_body_footer">
                  [<a href="{{ route('posts.edit', $post) }}">編集</a>]
                  <form class="delete" method="post" action="{{ route('posts.destroy', $post) }}">
                    @csrf
                    @method('DELETE')
                    <input type="submit" value="削除">
                  </form>
                </div>
              </div>
              <div class="post_comments">
                <span class="post_comments_header">コメント</span>
                <ul class="post_comments_body">
                  @forelse($post->comments as $comment)
                    <li>{{ $comment->user->name }}: {{ $comment->body }}</li>
                  @empty
                    <li>コメントはありません。</li>
                  @endforelse
                </ul>
                <form method="post" action="{{ route('comments.store') }}">
                  @csrf
                  <input type="hidden" name="post_id" value="{{ $post->id }}">
                  <label>
                    <input type="text" name="body">
                  </label>
                  <input type="submit" value="送信">
                </form>
              </div>
            </div>
          </li>
      @empty
          <li>書き込みはありません。</li>
      @endforelse
  </ul>
  {{ $like_posts->links() }}
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script>
    /* global $ */
    $('.like_button').each(function(){
      $(this).on('click', function(){
        $(this).next().submit();
        });
      });
    </script>
@endsection

自分で試したこと

書いたコードのスペルミスなどのチェック

0

1Answer

Controllerの記載しかないので明確なことはわかりませんが、

Method Illuminate\Database\Eloquent\Collection::latest does not exist.

とのことなので、likePosts関数がCollectionをreturnしているようです

Auth::user()->likePosts-> sortBy(// 並び順を指定)->last() でどうでしょうか?

1Like

Comments

  1. @replica410

    Questioner

    回答ありがとうございます。
    すみません、頂いたコードを試したところ上手く動かず、代わりに\Auth::user()->likePosts->latest()->paginate(5)部分のlikePostsに()を付け足しビュー側の$postを$like_postsに書き換えたところ無事動く事が出来ました。

Your answer might help someone💌