【Laravel】DM機能実装のメモ(DBリレーションから表示まで)

投稿日:

プログラミング初心者の勉強ブログ #127

LaravelでDM機能作成を試みたので、DBのリレーションから、コントローラ、ビューまでの実装についてのメモをまとめる。Laravelやってみて思うことは、基本はRailとほぼ同じなんだなということ。Laravelの方が実装しやすい部分もあれば、Railsの方がよいなと思う部分もある。ジーズ入ってからはJS書く機会がたくさんあったため、PHPとJSの連携も前と比較してスムーズにできるようになった気がする。

 

目次

 

DM機能におけるDB設計とリレーション

DM機能は、ユーザーに関する情報テーブル(以下Usersテーブル)同士のリレーションとなる。今回は中間テーブルとしてConversationsテーブルを用意し、このDM機能実装に伴うDBリレーションをまとめていく。使うテーブルは3つであり、Users、Conversationsに加え、メッセージ情報を保存するためのMessagesテーブルを用意し、MessagesはUsersとConversationに対してリレーションさせる。

 

【イメージ図】

リレーションイメージ

DM機能の一番のややこしいところは、Usersテーブルをsenderとrecipientの2つに見立ててリレーションを構築する点である。Usersテーブルは、実際のテーブルとしては1つであるが、今回のこのリレーションにおいては、conversationsテーブルを中間テーブルに置く2つのテーブルとみなされる。

 

テーブル設計

Usersテーブル

/database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php

 

 

Conversationsテーブル(中間テーブル)

/database/migrations/xxxx_xx_xx_xxxxxx_create_conversations_table.php

 

 

Messagesテーブル

/database/migrations/xxxx_xx_xx_xxxxxx_create_messages_table.php

 

モデル定義

userモデル

app/User.php

 

 

conversationモデル

app/conversation.php

conversationモデルオブジェクトで使える関数として、senderユーザーを引っ張れるものと、recipientユーザーを引っ張ってこれるものをそれぞれ用意。また、conversationはログインユーザーがsenderでもrecipientでもあるため、DM相手を表示するために独自メソッドとしてotherUser()を用意しておくと便利。

 

 

messageモデル

app/message.php

 

 

コントローラーの設定

usersコントローラーは省略する。

 

ConversationsController.php

 

 

MessagesController.php

 

 

ビューでの表示

【完成図】

完成図

 

ルーティング

web.php

 

 

ログインユーザーに紐づいたconversationの一覧を表示(conversations/index)

ConversationsController.php@indexを叩くためにテキトーにリンクを貼る。

 

一覧が表示されるビューを作成、

conversations_index.blade.php

 

 

DM個別ページを作成

messages_index.blade.php

 

 

message.jsで非同期表示

js/message.js

 

 

まとめ

最近は梅雨で生乾きの匂いと、Teva履き続けてて自分の足の匂いに悩んでます。臭くないおっさんを目指したい。

以上ありがとうございました。

-プログラミング学習
-,

Copyright© s u p ? , 2019 All Rights Reserved.