質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

1658閲覧

createメソッド実行時にカラムへ値が入らない

kenya.yasuhara

総合スコア17

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/03/30 16:13

編集2020/03/30 16:19

やりたいこと

チャットアプリを作成しており、現在チャットを交換している2人(ログインユーザーとその会話相手)のユーザー間で交わされたコメントのみがチャットルームで表示されるようにしたいです。
→そのためにcommentsテーブルのlogin_idpartner_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

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meshi_s

2020/03/30 23:55

Commentモデルのコードも提示していただけますか?
kenya.yasuhara

2020/03/31 00:31 編集

@meshi_s コメント頂きありがとうございます。 モデルは作成していません。 理由として ・DBとの接続はモデルが無くても可能であるため ・一旦動く状態にしたかったため、ビジネスロジックはコントローラーにまとめて書きたかったという糸があったため があります。
mikkame

2020/03/31 00:42

> use App\Comment; これはCommentモデルではない、ということですか?
kenya.yasuhara

2020/04/07 00:27

おっしゃるとおりでした! 自分がEloquentとモデルを使っていることに気づいていませんでした。 ありがとうございます!
guest

回答1

0

ベストアンサー

Comment::create([ 'login_id' => $userID, 'partner_id' => $partnerID, 'name' => $user->name, 'comment' => $comment ]);

ここでEloquentモデルをつかった作成処理を実行していますので
App/Commentfillablepartner_idが追加されていないのではないでしょうか?
useやComment::を使用してるところからモデルを作成しているようですが、
モデルをなしにして挿入する場合

DB::table('comments')->insert( [ 'login_id' => $userID, 'partner_id' => $partnerID, 'name' => $user->name, 'comment' => $comment ] );

のようになると思います
一度試していただけますと幸いです

投稿2020/03/31 01:38

編集2020/03/31 01:43
natsume2233

総合スコア225

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenya.yasuhara

2020/04/07 00:28

実は自分でEloquentとモデルを使っていることをわかっておらず。。。createメソッドってeloquentで規定されているものだったんですね。 修正してみます! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問