やりたいこと
チャットアプリを作成しており、現在チャットを交換している2人(ログインユーザーとその会話相手)のユーザー間で交わされたコメントのみがチャットルームで表示されるようにしたいです。
→そのためにcommentsテーブルのlogin_id
とpartner_id
を条件にwhereで絞ろうとしています
課題
以下のChatController
addComment
関数にて、コメントcreate時に会話相手(commentsテーブルのpartner_id
)がcommentsテーブルへinsertされません
補足
Comment::create
実行後にもaddComment
内でpartnerID
が取れることを確認している- formリクエストでpartnerIDがパラメーターとして飛んでいることを確認している
- createの処理自体はコケておらず、成功している(以下commentsテーブルの状態)
コード
ChatController
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Validator; // use App\User; use Illuminate\Http\Request; use App\Comment; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class ChatController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); } public function showChatRoom(Request $request) { $user = Auth::user(); $userID = $user->id; $partnerID = $request->route('id'); // この時点ではcommentはparnerIDを持っていないので、whereで絞れない $comments = DB::table('comments')->where('partner_id', $partnerID)->where('login_id', $userID)->get(); return view('chat_room', [ 'comments' => $comments, 'partnerID' => $partnerID ]); } //store comment records public function addComment (Request $request) { $user = Auth::user(); $userID= $user->id; $comment = $request->input('comment'); $partnerID = $request->input('partner_id'); $request->validate([ 'comment' => 'required|max:256' ]); Comment::create([ 'login_id' => $userID, 'partner_id' => $partnerID, 'name' => $user->name, 'comment' => $comment ]); return redirect()-> action('ChatController@showChatRoom', $userID); } public function getData(){ $comments = Comment::orderBy('created_at', 'desc')->get(); $json = ["comments" => $comments]; return response()->json($json); } }
chat_room.blade(チャットルームのview)
@extends('layouts.app') @section('content') <div class="chat-container row justify-content-center"> <div class="chat-area"> <div class="card"> <div class="card-header">Comment</div> <div class="card-body chat-card"> <div id="comment-data"></div> </div> </div> </div> </div> <form method="POST" action='ChatController@addComment'> @csrf <input type="hidden" name="partner_id" value={{ $partnerID }}> @if ( $errors->any() ) <div class= "error-container"> <ul> @foreach ( $errors->all() as $error ) <p>{{ $error }}</p> @endforeach </ul> </div> @endif <div class="comment-container row justify-content-center"> <div class="input-group comment-area"> <textarea class="form-control" id="comment" name="comment" placeholder="push massage (shift + Enter)" aria-label="With textarea" onkeydown="if(event.shiftKey&&event.keyCode==13){document.getElementById('submit').click();return false};"></textarea> <button type="submit" id="submit" class="btn btn-outline-primary comment-btn">Submit</button> </div> </div> </form> @endsection @section('js') <script src="{{ asset('js/comment.js') }}"></script> @endsection
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー