Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@nmassa

Laravelでいいね!数が多い順にランキング表示する

はじめに

初めてLaravelを勉強する時、ユーザーが記事を投稿したり、投稿に対していいね!ができるような掲示板やSNS風アプリを作るかと思います。
本記事では、いいね数が多い順に投稿を表示する(いいね数が多い投稿ランキングの表示)方法を紹介します。

開発環境

・PHP7.4
・Laravel6

前提

・教材で学べるような簡単なCRUDアプリが作れる。
・CRUDアプリにいいね機能が実装されている。
(基本的なCRUD, いいね機能の実装方法については本記事では割愛させていただきます。)

実装内容

・いいね数が多い順に投稿のデータを取得する処理を記述(Controller)
・取得したデータを画面に表示(View)

いいね数が多い順に投稿のデータを取得する処理を記述(Controller)

PostController.php
<?php

class PostController extends Controller
{
    public function index() 
    {
        //いいね数が多い順に投稿のデータを取得(今回は上位3件)
        $rankingPostLikes = Post::withCount('likes')->orderBy('likes_count','desc')
            ->take(3)->get();

        return view('posts.index', [
            'rankingPostLikes' => $rankingPostLikes,
            ]);
    }
}

ここではLaravelのwithCountメソッドを使用。
withCountメソッドはリレーション結果の件数を取得する際に使用されるメソッドです。
今回の場合はlikesとのリレーション結果の件数を取得して、likes_countカラムに格納しています。
dd()を使用して$rankingPostLikesの中を見てみるとlikes_countカラムにいいねの件数が格納されていることがわかるかと思います。

あとはorderByメソッドを使用して降順に並び替えれば、いいね数が多い順に投稿のデータを取得する処理は完成。

likesとのリレーション結果の件数 = いいねの数 とイメージしていただけるとわかりやすいと思います。

参考:【Readouble】関連するモデルのカウント

取得したデータを画面に表示(View)

index.blade.php
@extends('app')
@section('title', '~')
@section('content')
# 〜〜〜〜〜〜〜 略 〜〜〜〜〜〜〜
          @foreach($rankingPostLikes as $post)
            {{ $post->postsテーブルのカラム名 }} //取得した投稿のデータ
            {{ $post->likes_count }} //いいねの数
          @endforeach
# 〜〜〜〜〜〜〜 略 〜〜〜〜〜〜〜
@endsection

見た目やレイアウトはBootstrapやSass等で自由に整えてください。
私の場合はこのようになりました。

FireShot Capture 117 - NagasakiMasaru_portfolio_ 転職活動用ポートフォリオとしてこれまでの学習内容をまとめております。是非ご覧ください。_ - github.com.png

上からいいねの数が多い順に投稿を表示できていますね!

最後に

以上で、いいね数が多い順に投稿を表示する方法について説明は終了です!
今回がQiita初投稿でした、誰かのお役に立てれば幸いです。
お疲れ様でした。

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nmassa
PHP / Laravel / AWS勉強しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?