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

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

ただいまの
回答率

88.32%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 342

kenya.yasuhara

score 17

やりたいこと

チャットアプリを作成しており、現在チャットを交換している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

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • meshi_s

    2020/03/31 08:55

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

    キャンセル

  • kenya.yasuhara

    2020/03/31 09:31 編集

    @meshi_s
    コメント頂きありがとうございます。

    モデルは作成していません。

    理由として
    ・DBとの接続はモデルが無くても可能であるため
    ・一旦動く状態にしたかったため、ビジネスロジックはコントローラーにまとめて書きたかったという糸があったため

    があります。

    キャンセル

  • mikkame

    2020/03/31 09:42

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

    キャンセル

  • kenya.yasuhara

    2020/04/07 09:27

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

    キャンセル

回答 1

checkベストアンサー

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/04/07 09:28

    実は自分でEloquentとモデルを使っていることをわかっておらず。。。createメソッドってeloquentで規定されているものだったんですね。

    修正してみます!
    ありがとうございます!

    キャンセル

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

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る