質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

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

takigawa777
takigawa777

総合スコア21

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

1回答

0グッド

0クリップ

319閲覧

投稿2022/10/21 08:00

編集2022/10/21 11:42

前提

Laravelで画像投稿サイトを作成していて、そこの「いいね一覧ページ」にページネーションを実装しようとしています。

実現したいこと

いいねを付けた投稿を見られる「いいね一覧ページ」にてページネーションの実装をする方法が分からず困っています。

発生している問題・エラーメッセージ

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

該当のソースコード

User.php(ユーザーモデル) <?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'profile', 'image' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; // リレーションを設定 public function posts(){ return $this->hasMany('App\Post'); } public function scopeRecommend($query, $self_id){ return $query->where('id', '!=', $self_id)->latest()->limit(3); } public function likes(){ return $this->hasMany('App\Like'); } // $this->belongsToMany('モデル名', 中間テーブル名); public function likePosts(){ return $this->belongsToMany('App\Post', 'likes'); } // 自分がフォローしているユーザーを取得 public function follows(){ return $this->hasMany('App\Follow'); } //自分がフォローしているユーザー // $this->belongsToMany(モデル名, 中間テーブル名, リレーションを設定する側のカラム名, リレーションを設定される側のカラム名) public function follow_users(){ return $this->belongsToMany('App\User', 'follows', 'user_id', 'follow_id'); } // 自分をフォローしているユーザー public function followers(){ return $this->belongsToMany('App\User', 'follows', 'follow_id', 'user_id'); } public function isFollowing($user){ $result = $this->follow_users->pluck('id')->contains($user->id); return $result; } }
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

試したこと

このエラーの要因がスペルミス等が多いと聞き、書いたコードのスペルミスなどのチェック

補足情報(FW/ツールのバージョンなど)

Laravel6_v1 Cloud9 Windows10

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

Userのコードが必要。

リレーションだとすると、リレーションは()の有無で変わる。

php

1$like_posts = \Auth::user()->likePosts()->latest()->paginate(5);

LaravelのDB関連はリレーションが一番複雑なので何度もドキュメント読んで身に付けるしかない。

投稿2022/10/21 10:39

kawax

総合スコア10020

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

takigawa777

2022/10/21 11:41 編集

回答ありがとうございます。 ユーザーモデルのコードが必要という事でしょうか? 質問に不慣れで記載不足がありません、質問を更新してUserモデルを新しく追加しました。 追記・・・すみません、あれから()を追記しビュー側の$posts部分を$like_postsに変更したところ無事動く事が出来ました。
m.ts10806

2022/10/21 23:44

回答の以下を無視してはいけないと思います。 >何度もドキュメント読んで身に付けるしかない。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。