Laravel いいね機能の実装方法・ログイン版とログインなし版

Laravelデータベース

「いいね」機能をつける場合、ログインユーザーのみが「いいね」できるようにする方法が一般的ですが、ログインなしの場合でも可能です。

今回は、前半はログインしているユーザー用の「いいね」機能について解説します。

後半は、ここにログインなしユーザーの「いいね」も反映されるようにしていきます。

ログインなしの場合は、IPアドレスを使って、ユーザーを識別します。

じゅんこ
じゅんこ

Laravelの醍醐味のひとつは、リレーション。

今回はリレーションをフル活用して、機能を搭載していきますね。

Laravel いいね機能追加・ログインユーザー用

まずはログインユーザーのみが「いいね」できる機能を搭載します。

今回は、すでにUserモデルとPostモデルがあるとします。

ここに「Nice」モデルを追加して、Userモデル、Postモデルとリレーションを設定していきます。

① Niceモデルを作成

Niceモデルをマイグレーションと共に作成します。

マイグレーションファイルには、次のようにいれます。

マイグレートを実行します。

② リレーションを設定

Userモデル・Postモデル・Niceモデルにリレーションを設定します。

【Userモデルファイル】

1人ユーザーがたくさん投稿をし、さらに「いいね」をする可能性があります。

そこで、PostモデルとNiceモデルに対して、hasManyメソッドを設定します。

【Postモデルファイル】

ひとつの投稿は、ひとりのユーザーに紐づくので、Postモデルに対してはbelongsToメソッドを設定します。

ですが、ひとつの投稿は、たくさんの「いいね」を獲得する可能性があるので、Niceモデルに対してはhasManyメソッドを設定します。

【Niceモデルファイル】

ひとつの「いいね」は1人のユーザー、ひとつの投稿に紐づくので、UserモデルとPostモデルそれずれに対して、belongsToメソッドを設定します。

③ ルートファイルの設定

今回は既にある投稿表示用の画面に「いいね」機能を搭載することにします。

新たに 「いいね」用と、「いいね」取消用の2つのルート設定を作ります。

【routes/web.php】

④ コントローラーの作成

「いいね」を付け足し消したりする処理を記述するため、NiceContollerを作ります。

NiceControllerを開き、上部に、次の3つのuse宣言を追加しておきましょう。

次に「いいね」をつけるためにniceメソッドを入れます。

【NiceController niceメソッド】

もうひとつ「いいね」を取り消すunniceメソッドを入れます。

【NiceController unniceメソッド】

⑤ 投稿表示用のコントローラーに記述を追加

「いいね」ボタンを表示する投稿表示用のコントローラーにも、コードを少し追加します。

ログインユーザーが、個別投稿に「いいね」をしてある場合、$niceに値が入ります。

この$niceをビューファイルに受け渡します。

投稿を表示させるためのコントローラーのメソッドに、下記のコードを追加してください。

なお、ファイルの上部にuse宣言 use App\Models\Nice; も入れておきましょう。

【書き方例(showメソッドに記述する場合)】

⑥ビューファイルの作成

最後は、見える部分を作っていきます。

既にある投稿表示用のビューファイルに、次のように、「いいね」ボタンを設置します。

ちなみに、「いいね」は、こちらのハートマーク使っております。

⑦ テストしてみる

では、テストしてみます。

「いいね」前は、こんな表示。

「いいね」をすると、こうなります。

もう1回ボタンを押すと、「いいね」が取り消されます。

もちろん、他のユーザーの「いいね」もカウントされます。

Laravel いいね機能追加・ログインなしでも可能にする

上記を加工して、次に「ログインなし」のユーザーの「いいね」も反映されるようにしていきましょう。

① ipアドレス用のカラムを追加

Niceのデータベースに、ipアドレス用のカラムを追加します。

一度、マイグレーションを取り消します。

niceのマイグレーションファイルに、ipアドレス用カラムを付け足します。

【nice マイグレーションファイル】

再度マイグレートします。

② 投稿表示用のコントローラーに記述を追加

次に、投稿を表示するためのコントローラーに処理を追加します。

ユーザーのipアドレスを取得。

このipアドレスで投稿に「いいね」をしてある場合、$niceに値が入ります。

この$niceをビューファイルに受け渡します。

【show.blade.php】

③コントローラーの作成

最後にコントローラーです。

NiceControllerのniceメソッドは、次のように書き替えます。

ユーザーが「いいね」をすると、新しくNiceのインスタンスができます。

ユーザーのipアドレスが、nicesデータベースの ipカラムに入ります。

もしユーザーがログインしていれば、ユーザーのidが、nicesデータベースのuser_idに入ります。

【NiceController niceメソッド】

unniceは、次のように書き替えます。

【NiceController unniceメソッド】

④ テストしてみる

では、テストをしてみます。

画面はログインありと全く同じですが^^; うまくいきました。

なお、ipアドレスを変えたら、何度も「いいね」が出来ちゃいます。

この辺りは、仕方ないですね。

Laravelデータベース

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

 

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
デプロイ講座付。StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました