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をビューファイルに受け渡します。

【show.blade.php】

⑥ビューファイルの作成

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

既にある投稿表示用のページに、次のように、「いいね」ボタンを設置します。

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

⑦ テストしてみる

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

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

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

もう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でWebアプリをいちから作れるようになりたい!」

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

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

タイトルとURLをコピーしました